[英]Oracle SQL: Update with variable table name and fixed column name
我是SQL的初学者,但有一个问题:我的数据库中有大量的表。 一些表具有名为“ lab”的列。 在这些列中,我需要更改值。
所以我设法通过获取表的名称
SELECT CNAME,TNAME FROM SYSTEM.COL WHERE CNAME = 'LAB';
而且我知道我的更新命令
update TNAME set LAB='VALUE' WHERE LAB='OLDVALUE'
但是我无法通过变量TNAME或其他方式连接这两个语句。 我尝试使用立即执行,但这对我没有好处。
如果是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;
您将需要为此编写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,而不能用于表名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.