DBMS_SQL.Execute和BULK更新 - 需要帮助

时间:2011-02-23 20:39:22

标签: oracle plsql sqlbulkcopy

我有这个查询

  

从表格中选择col1,col2   critera =:criteria_var

在DBMS_SQL中使用特定查询来打开游标, BIND 变量。然后,DBMS_SQL函数将获取这些值,然后更新另一个表。但这一次只发生一行。

我想使用BULK FETCH INTO。我已经阅读了教程,但我找不到任何可以在DBMS_SQL中使用BULK FETCH INTO的地方。

有可能吗?如果有,那怎么样?

1 个答案:

答案 0 :(得分:1)

您可以使用DBMS_SQL包中的BIND_ARRAY过程进行批量提取。 DBMS_SQL文档中有an example of this

然而,除非特别需要使用DBMS_SQL,(并且首先假设动态SQL是必要的),否则使用本机动态SQL似乎更容易,即

EXECUTE IMMEDIATE 'SELECT col1, col2 FROM tableName WHERE criteria = :1'
   BULK COLLECT INTO l_col1_collection, l_col2_collection
  USING l_criteria_variable;

但是,如果您只是从此查询中获取数据以更新其他表,那么让Oracle通过构造使用此查询获取多行的单个UPDATE语句来执行此操作会更有效。像

这样的东西
UPDATE destination_table dest
   SET (col1, col2) = (SELECT col1, col2
                         FROM source_table_name src
                        WHERE criteria = l_criteria_variable 
                          AND src.key_column = dest.key_column)
 WHERE EXISTS( SELECT 1
                 FROM source_table_name src
                WHERE criteria = l_criteria_variable 
                  AND src.key_column = dest.key_column)