我有这个查询
从表格中选择col1,col2 critera =:criteria_var
在DBMS_SQL中使用特定查询来打开游标, BIND 变量。然后,DBMS_SQL函数将获取这些值,然后更新另一个表。但这一次只发生一行。
我想使用BULK FETCH INTO。我已经阅读了教程,但我找不到任何可以在DBMS_SQL中使用BULK FETCH INTO的地方。
有可能吗?如果有,那怎么样?
答案 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)