从SQL存储过程创建/更改

我想从一个过程调用create table / alter table命令.可能吗?

我的要求是更改所有表中列的数据类型.所以,我只是从user_tab_cols获取列名.现在我想创建一个需要create语句的临时表..但是我无法在proc中使用它.

有人可以帮帮我吗?

最佳答案
我从USER_TAB_COLUMNS的引用中推测这是Oracle. ALTER和CREATE语句是DDL,我们无法直接在PL / SQL中执行.但是,有几种方法可以解决此限制:EXECUTE IMMEDIATE和DBMS_UTILITY.EXEC_DDL().我将在以下示例中使用EXECUTE IMMEDIATE.

begin
    for lrec in ( select table_name from user_tab_columns
                  where column_name = 'UNIVERSAL_COLUMN_NAME')
    loop
        execute immediate 'alter table '||lrec.table_name||
                               ' modify UNIVERSAL_COLUMN_NAME varchar2(255)';
    end loop;
end;

请注意,通常的限制适用:新数据类型必须与现有数据类型兼容(除非列为空),并且使用某些特定数据类型(如CLOB)会比较棘手.

编辑

我没有解决CREATE TABLE语句.原则是相同的,输出时间更长.此外,我不完全清楚它如何适用于您之前更改这些列的数据类型的要求.

转载注明原文:从SQL存储过程创建/更改 - 代码日志