oracle存储过程遇到的问题

最近新的项目,会批量执行数据,用到了存储过程和函数,遇到的问题记录如下:

1、涉及大量数据,所以决定分批commit数据

2、out无论是存储过程还是函数,都会返回数据,当时当我们手动raise(抛出异常时),参数并不会返回。感觉应该和java代码一样,抛出异常,被上层调用捕获,并没有返回值

3、MSG     := SQLCODE || SQLERRM;可以查看错误信息

4、设计相关,最原子性的操作如果抛出异常后,可以通过错误代码,错误信息传送给调用者,依次传送到最外层调用者。最后返回给程序调用者

5、建包后,可能调试进不到程序中(没有验证)

6、如果存储过程不能debug执行到存储过程中,可以尝试重新编译

7、计算时,例如计算相差时间,可以通过伪表dual,将数据into到声明的变量中

8、可以自定义类型type,封装参数

9、动态sql语句,要用到动态游标,如下

--定义一个动态游标
TYPE REF_CURSOR_TYPE IS REF CURSOR;
--定义游标类型
INFO_CURSOR REF_CURSOR_TYPE;

10、循环游标暂时知道两种方式

   有一种带参数的游标,项目中没有用到,参考http://blog.csdn.net/s630730701/article/details/68938837

 10.1、

         不用手动打开关闭游标

          FOR   自定义随便起名    IN  游标名称  LOOP

           END LOOP;

10.2、

    --声明游标

     CUSOR 游标名称  IS

     查询语句;(普通游标)

   --打开游标

      OPEN INFO_CURSOR FOR VSQL;(动态游标);

      OPEN INFO_CURSOR(普通游标);

   --循环游标

      LOOP

                   FETCH 游标名称    INTO 变量;

                    EXIT WHEN 游标名称%NOTFOUND;

        END LOOP;

   --关闭游标

       CLOSE 游标;

11、执行动态sql

计算条数:

EXECUTE    IMMEDIATE      动态SQL名称   INTO    变量;

 

12、遇到死锁等问题,可以用sys登录,在工具栏中的session,kill掉session。如下所示

 

posted on   struggle_beiJing  阅读(688)  评论(1编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2016-07-26 修改系统时间,导致百度上不去

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示