我是SQL的初学者并遇到问题: 我有一个包含大量表格的数据库。某些表格中有一个名为“lab”的列。 在这个列中我需要更改值。
所以我设法通过
获取表格的名称SELECT CNAME,TNAME FROM SYSTEM.COL WHERE CNAME = 'LAB';
我知道我的更新命令
update TNAME set LAB='VALUE' WHERE LAB='OLDVALUE'
但我无法通过变量TNAME或其他东西来管理这两个语句。我尝试使用execute immediate,但这对我没有好处。
答案 0 :(得分:0)
如果它的Oracle,这样的事情应该这样做:
BEGIN
FOR cur_tabs_cols IN ( SELECT CNAME,TNAME FROM SYSTEM.COL WHERE CNAME = 'LAB'; )
LOOP
EXECUTE IMMEDIATE 'UPDATE ' || cur_tabs_cols.TNAME || ' SET LAB = ''VALUE'' WHERE LAB = ''OLDVALUE''';
END LOOP;
COMMIT;
END;
答案 1 :(得分:0)
你需要为此编写pl / sql。
首先,请不要使用SYSTEM.COL
。而是使用数据字典视图USER_TAB_COLS
或USER_TAB_COLUMNS
。 (或ALL_TAB_COLS
如果在其他模式中)
EXECUTE IMMEDIATE
就是你想要的。
BEGIN
FOR i IN (SELECT table_name
FROM user_tab_cols
WHERE column_name = 'LAB')
LOOP
EXECUTE IMMEDIATE
'UPDATE ' || i.table_name || ' set LAB = :value where LAB = :oldvalue'
USING 'value', 'oldvalue';
END LOOP;
END;
您可以(并且应该)对value和oldvalue使用绑定变量,而不是表名。