边儿上的小人您要嫌碍事儿,可将鼠标放在上头,边上底下有个叉,点一下就收起来了

【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 @   DbWong_0918  阅读(441)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示