首页 > 解决方案 > 如何使用列值作为选择表达式

问题描述

有一个表包含一个包含 SQL 选择表达式的列。请参见以下示例:

╔════╦════════╦═══════════════════════════════════════════╗
║ ID ║ Code   ║ Expression                                ║
║ 1  ║ B12321 ║ SELECT * FROM table WHERE code LIKE '%'   ║
║ 2  ║ A35525 ║ SELECT * FROM table WHERE code = '1234'   ║
║ 3  ║ C23213 ║ SELECT * FROM table WHERE code <> '%D'    ║
╚════╩════════╩═══════════════════════════════════════════╝

我想遍历表达式列,执行这些语句并将结果插入另一个表。这甚至可能吗?我找不到与此相关的问题。除此之外,我读到了一个使用游标循环遍历表格的内容,但对此有很多负面影响。

如果可能的话,您能否提供有关我遇到的问题的有用链接,或者提供更好的示例代码。

标签: sqloracleplsqlexpression

解决方案


您需要动态 SQL。由于您不想返回任何数据,因此可以使用一个小的 PL/SQL 过程来实现:

create or replace procedure insert_by_code(in_code varchar2) as
begin
  for rec in (select expression from mytable where code = in_code) loop
    execute immediate 'insert into other_table ' || rec.expression;
    commit;
  end loop;
end insert_by_code;

或带有匿名块的临时:

begin
  for rec in (select expression from mytable where code = :code) loop
    execute immediate 'insert into other_table ' || rec.expression;
    commit;
  end loop;
end;

推荐阅读