Oracle PL / SQL中的批量更新

时间:2016-10-18 15:36:08

标签: oracle plsql bulk

我有一张这样的表:

table_name     SQL_statement               id_value      result

employee       select ... where ..= :1    101           
customer       select ....where ..= :1    903       
  1. 将有大约6-8个不同的表
  2. ID_VALUE作为参数提供给SQL_Statement
  3. SQL语句将始终返回单行。
  4. " c"的结果上面应存储在结果栏
  5. 我知道我可以使用EXECUTE IMMEDIATE,但这会在SGA中创建硬分析。

    这里可以使用哪种BULK技术?

1 个答案:

答案 0 :(得分:0)

如果您可以假设语句始终使用固定别名提取单个值,则可以尝试以下操作。

<强>设置:

create table yourTable(table_name varchar2(30), SQL_statement varchar2(100), id_value number, result number);
insert into yourTable
(
select 'employee', 'select :1 *2 as result from dual', 1,  null from dual union all           
select 'customer', 'select :1    as result from dual', 10, null from dual
);

给定别名result,您可以使用单个更新语句。

<强>更新

update yourTable
set result = extractvalue(xmltype(dbms_xmlgen.getxml(replace (SQL_statement, ':1', id_value))),'/ROWSET/ROW/RESULT')

<强>结果:

SQL> select *
2  from yourTable;

TABLE_NAME SQL_STATEMENT                              ID_VALUE     RESULT
---------- ---------------------------------------- ---------- ----------
employee   select :1 *2 as result from dual                  1          2
customer   select :1    as result from dual                 10         10