oracle存储过程中游标的使用(包括带参数的游标)

最近因为项目需要要写存储过程,以前没咋写过,接触到是接触过,在软通的时候接触过,那是华为的项目那个几个存储过程很大很复杂,也很乱,注释也少,看了个大概。最近一个月,前后也写了七八个简单点的存储过程,也对存储过程有了一个简单的认识,其实也不是很难,多查资料,多实践。闲话不扯了,下面主要说一下游标的组合使用,记录下来即便以后长时间不用了忘记。

场景:有几张表,现在根据业务要求要处理表b中的数据,但先要安照一个标准来处理是吧,这个标准又在表a中,a表中的标准有不是一条,现在需要安照a表的标准吧b表的数据都处理一边。这个是业务。

思考:首先要安装a表来处理的话,是不是要循环a表中的数据来处理那?肯定的,那就要先先一个游标来控制a表循环了。接下来要根据a表的标准来分析b表的数据,那按照java的理解应该是在a表的循环中套一个循环来处理b表的数据,其实这里也是一样的,那就还需要一个游标来控制整个里层的循环了,到这就要考虑怎么来嵌套游标循环了,可以百度“oracle 嵌套游标的使用”看看,这里不记录那些了,由于业务需要b表的数据量有比较大,a表的某一个标准也只是b表中的一部分数据,就是说但嵌套循环的时候还需要a表的中那条记录的一些字段信息。这样嵌套的时候考虑的就要多一点了,最后我选择使用带参数的游标来实现,把需要的a表参数传入b表中。

具体例子:

create or replace procedure P_SBZL_BLDY is

     --定义变量
     v_xlbh SP_DATA_TQI.Xlbh%type;
     v_xingb SP_
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle 存储过程可以使用游标来处理结果集。游标是一种指向结果集的命名数据结构,可以通过游标来访问结果集的数据行。下面是一个简单的示例,演示了如何在 Oracle 存储过程使用游标。 ```sql CREATE OR REPLACE PROCEDURE my_proc IS -- 声明游标类型 CURSOR my_cursor IS SELECT column1, column2, column3 FROM my_table WHERE column4 = 'some condition'; -- 声明游标返回的数据类型 TYPE my_cursor_type IS RECORD ( column1 my_table.column1%TYPE, column2 my_table.column2%TYPE, column3 my_table.column3%TYPE ); -- 声明变量来存储游标返回的数据 my_data my_cursor_type; BEGIN -- 打开游标 OPEN my_cursor; -- 循环遍历游标返回的结果集 LOOP -- 获取下一行数据 FETCH my_cursor INTO my_data; -- 判断是否还有数据 EXIT WHEN my_cursor%NOTFOUND; -- 处理游标返回的数据 -- ... END LOOP; -- 关闭游标 CLOSE my_cursor; END; ``` 在这个示例,我们首先声明了一个游标类型 `my_cursor`,并且定义游标返回的数据类型 `my_cursor_type`。然后我们声明了一个变量 `my_data`,用来存储游标返回的数据。 在存储过程主体,我们首先打开游标 `my_cursor`,然后使用 `LOOP` 循环遍历游标返回的结果集。在循环体,我们使用 `FETCH` 语句获取下一行数据,并且判断是否还有数据。如果没有数据了,我们使用 `EXIT` 语句退出循环。否则,我们可以处理游标返回的数据,比如将其插入到另外一个表。最后,我们关闭游标 `my_cursor`,释放资源。 需要注意的是,在存储过程使用游标可能会影响性能,特别是当处理大量数据时。因此,我们应该尽可能地使用 SQL 查询语句来处理结果集,而不是使用游标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值