plsql FOR循环未停止

plsql FOR循环未停止,plsql,Plsql,我想向所有符合特定条件的表中添加特定列,例如“NAME%”。当我的代码在某种程度上工作时,我得到了错误消息: 00000-“表中已存在正在添加的列” 为什么循环会继续,即使我的数据库中所有具有指定条件的表都被更改了(我检查了这些表) 你是说: 使用ALL_TABLES而不是USER_TAB_COLUMNS表(在ALL_TABLES中,每个表都有一行,在USER_TAB_COLUMNS中出现多次,具体取决于您的字段计数) 我认为,您不需要提交(它不是一个DML,而是一个DDL语句)。您的意思是:

我想向所有符合特定条件的表中添加特定列,例如“NAME%”。当我的代码在某种程度上工作时,我得到了错误消息:

  • 00000-“表中已存在正在添加的列”
  • 为什么循环会继续,即使我的数据库中所有具有指定条件的表都被更改了(我检查了这些表)

    你是说:

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

    我认为,您不需要提交(它不是一个
    DML
    ,而是一个
    DDL
    语句)。

    您的意思是:

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


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

    您查询了错误的表(必须是一个每个表都存在一次的表,不经常..可能所有表都存在?@nabuchdonossor Check!把它写下来,很高兴接受它!好的,我会这样做。如果您查询了错误的表(必须是一个每个表都出现一次的表,不经常出现..可能所有的表?@nabuchdonossor Check!把它写下来,很高兴接受它!好的,我会的
    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;
    
    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;