首页 > 解决方案 > 将 Oracle 查询应用于表列表

问题描述

我有一个标记为“TableA_101818”、“TableB_101818”等的 Oracle 实例中的表列表,我想在一个查询中更新所有这些表。我知道我可以使用以下方法获取表格列表:

SELECT table_name FROM all_tables WHERE table_name LIKE 'Table%_101818'

但我不确定如何应用类似的东西:

UPDATE (SELECT table_name FROM all_tables WHERE table_name LIKE 'Table%_101818) 
SET COL1 = 'something' WHERE col2 = 'something else'

标签: sqloracle

解决方案


您可以使用动态 SQL:

begin
  for r in (SELECT table_name FROM all_tables 
            WHERE table_name LIKE 'Table%_101818') 
  loop
    dbms_output.put_line('SELECT * FROM ' || r.table_name ||
                         q'{ WHERE col2 = 'something else';}');

    execute immediate 'UPDATE ' || r.table_name ||
                      q'{ SET COL1 = 'something' WHERE col2 = 'something else'}';
  end loop;
  commit;
end;
/

推荐阅读