通过从另一个表中获取表名来更新表

时间:2018-10-24 06:01:36

标签: sql oracle sql-update

假设我有一个主表(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';

有可能吗?

2 个答案:

答案 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;
/