我想向满足特定条件的所有表添加特定列,例如喜欢“ NAME%”。当我的代码正常工作时-在某种程度上-我收到错误消息:
- 00000-“表中已存在要添加的列”
即使更改了数据库中具有指定条件的所有表(我检查了这些表),为什么循环仍在继续?
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;
答案 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
语句)。