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