plsql FOR LOOP没有停止

时间:2019-02-20 09:34:00

标签: plsql

我想向满足特定条件的所有表添加特定列,例如喜欢“ NAME%”。当我的代码正常工作时-在某种程度上-我收到错误消息:

  
      
  1. 00000-“表中已存在要添加的列”
  2.   

即使更改了数据库中具有指定条件的所有表(我检查了这些表),为什么循环仍在继续?

set serverout on
DECLARE
sql_stmt VARCHAR2(200);

BEGIN
    FOR x in (SELECT * FROM USER_TAB_COLUMNS WHERE table_name LIKE 'QM_%')
    LOOP
        sql_stmt := 'ALTER TABLE '||x.TABLE_NAME||' ADD (TEST Integer)';
        DBMS_OUTPUT.PUT_LINE ( sql_stmt ||';') ;
        EXECUTE IMMEDIATE sql_stmt;
    END LOOP;
    COMMIT;
 END;

1 个答案:

答案 0 :(得分:3)

您的意思是:

使用ALL_TABLES代替USER_TAB_COLUMNS表(在ALL_TABLES中,每个表都有一行,在USER_TAB_COLUMNS中多次出现,具体取决于您的字段计数)

set serverout on
DECLARE
sql_stmt VARCHAR2(200);

BEGIN
    FOR x in (SELECT * FROM ALL_TABLES WHERE table_name LIKE 'QM_%')
    LOOP
        sql_stmt := 'ALTER TABLE '||x.TABLE_NAME||' ADD (TEST Integer)';
        DBMS_OUTPUT.PUT_LINE ( sql_stmt ||';') ;
        EXECUTE IMMEDIATE sql_stmt;
    END LOOP;
    COMMIT;
 END;

我认为,您不需要commit(不是DML,而是DDL语句)。