假设我有一个主表(TEST),其中存储着各种表的名称,例如
ID | TABLE_NAME
1 | TABLE_1
2 | TABLE_2
3 | TABLE_3
现在我要更新这样的表
update (
select TABLE_NAME
from TEST
where id =1
) t set t.(some attribute) = 'XYZ';
有可能吗?
答案 0 :(得分:2)
是的,您的语法应该可以工作,但需要进行一些细微的更改:
UPDATE (SELECT some_col FROM TEST WHERE id = 1)
SET some_col = 'XYZ';
您需要通过将希望更新的列添加到子查询的select子句中来公开它们。
答案 1 :(得分:2)
使用PL / SQL块/ proc通过EXECUTE IMMEDIATE
DECLARE
v_value VARCHAR2(10) := 'XYZ';
BEGIN
FOR t IN (
SELECT table_name
FROM test --where condition
) LOOP
EXECUTE IMMEDIATE 'UPDATE ' || r.table_name || '
SET some_attribute = :somevalue'
USING v_value;
END LOOP;
END;
/