首页 > 数据库 >【Oracle】存储过程中将动态SQL的多行结果进行循环遍历

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

时间:2024-08-21 10:40:07浏览次数:7  
标签:遍历 temp 过程中将 SQL sql Oracle 动态 data

【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

这样就能实现要求了

标签:遍历,temp,过程中将,SQL,sql,Oracle,动态,data
From: https://www.cnblogs.com/jokingremarks/p/18371106

相关文章

  • sqlserver left join 后用 on 还是 where?
    昨天写SQLServer数据库上写SQL语句时,我原本想通过执行AleftjoinBon...and...的操作,将查询结果中的两条记录合并成一条,奈何发现结果中依然有两条记录。回顾了一下语法知识,意识到joinon...and...的语句并不会对结果集的记录条数进行过滤。它的主要作用是,根据and后......
  • MySQL存储过程示例代码
    CREATEDEFINER=`root`@`%`PROCEDURE`getReportWeavingProductionDay`(instartTimedatetime,inendTimedatetime,infactoryIdsvarchar(100),inmachineIdsvarchar(5000),inPageSizeint,inDataFromIndexint)BEGIN--参数说明--startTime:开始时间,endTime:结束时间,f......
  • MySQL基本操作
    MySQL基本操作学习目标:学习基本的SQL操作,实现数据库的基本管理SQL基本语法SQL库操作SQL表操作SQL数据操作一、SQL语法规则目标:了解SQL的基本语法规则SQL语法规则:SQL是一种结构化编程语言基础SQL指令通常是以行为单位SQL指令需要语句结束符,默认是英文分号:;、\g、\G\G:主......
  • Mysql从指定位置截取字符串
    在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:left()、right()、substring()、substring_index()。一.从左开始截取字符串用法:lef......
  • [20240818]测试21c下sqlplus show recyclebin的小问题2.txt
    [20240818]测试21c下sqlplusshowrecyclebin的小问题2.txt--//以前测试过,链接[20210722]sqlplus下showrecycebin的小问题.txt--//注:recycebin拼写错误应该是recyclebin.--//这个问题当时也是浪费了大量实际,我记忆遇到问题时是上午,执行showrecyclebin;[注空格+;],linux......
  • Oracle手工注入
    1.点击输入框下方的公告,进入到可sql注入界面2.通过1=1和1=2可以判断注入点?id=1and1=1  //显示正常?id=1and1=2  //显示错误检测到此处可以进行注入3.判断列数利用orderby?id=1orderby2  //显示正常?id=1orderby3  //显示错误所以一共有两......
  • MSSQLILABS靶场通关攻略
    判断注入首先用单双引号判断是否存在注入,这里可以看到是单引号判断是否为MSSQL数据库可以通过以下Payload来探测当前站点是否是MSSQL数据库,正常执行说明后台数据库为MSSQL;也可以根据页面的报错信息来判断数据库'andexists(select*fromsysobjects)--'andexist......
  • 墨者学院Oracle靶场通关
    首先1判断注入点这⾥通过and1=1和and1=2进⾏判断。发现存在注入点之后我们开始判断字段数id=1orderby2id=1orderby3字段=3页面回显异常 ,说明只存在两个字段接下来我们开始判断回显点id=-1unionselect'null','null'fromdual查完之后我们开始用下面......
  • Linux中MySQL安装与升级中的相关知识
    Linux中MySQL安装与升级中的相关知识1.MySQL的RPM安装通常分为不同的包,包括Server、Common、Client、Devel、Libs、Libs-compat、Test、Source,上述每个包的功能。Server:包含MySQL服务器的主要组件。Common:提供通用的功能和文件。Client:提供客户端工具用于连接服务......
  • SQL非技术快速入门39题
    ※食用指南:文章内容为牛客网《非技术快速入门》39道题重点笔记,用于重复思考错题,加深印象。练习传送门:SQL非技术快速入门39题目录:SQL13Wherein和NotinSQL19分组过滤练习题SQL20 分组排序练习题SQL22 统计每个学校的答过题的用户的平均答题数SQL24 统计每个用户......