【Oracle】存储过程中将动态SQL的多行结果进行循环遍历

【Oracle】存储过程中将动态SQL的多行结果进行循环遍历

需求背景:
有一段拼接出来的动态SQL,结果为多行,需要在函数或者存储过程中将其结果作为游标中的数据循环遍历出来以便后续数据操作

使用动态SQL和隐式游标

隐式游标不支持动态SQL的直接使用,但是可以通过EXECUTE IMMEDIATE来执行动态SQL并将结果存储在一个集合中,然后遍历这个集合,以实现这个需求

示例:

直接执行动态sql得到的结果是

image

使用隐式游标+EXECUTE IMMEDIATE组成的测试文件


declare
    dynamic_sql varchar2(4000);
    type temp_table_type is table of table1%rowtype;--此处表名要与动态SQL中的一致,视图也可以
    temp_data temp_table_type;
begin
    -- 动态拼接sql语句
    dynamic_sql := 'select a.* from table1 a where 1=1';

    -- 执行动态sql并将结果存储在集合中
    execute immediate dynamic_sql bulk collect into temp_data;

    -- 遍历集合
    for i in temp_data.first .. temp_data.last loop
        dbms_output.put_line('kindcode: ' || temp_data(i).kindcode || ', activecode: ' || temp_data(i).activecode);
    end loop;
end;

执行后输出

image

这样就能实现要求了

posted @ 2024-08-21 10:30  DbWong_0918  阅读(370)  评论(0编辑  收藏  举报