博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle存储过程遇到的问题
阅读量:4931 次
发布时间:2019-06-11

本文共 966 字,大约阅读时间需要 3 分钟。

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

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。如下所示

 

转载于:https://www.cnblogs.com/beijingstruggle/p/7237915.html

你可能感兴趣的文章
vue报错Error in render: "TypeError: Cannot read property '0' of undefined"
查看>>
silverlight 隐藏ChildWindow 右上角的关闭按钮
查看>>
oracle获取子串
查看>>
List排序
查看>>
Javascript闭包(Closure)
查看>>
字符串操作
查看>>
redis
查看>>
likely() 和 unlikely()
查看>>
4. Median of Two Sorted Arrays
查看>>
03一些View总结
查看>>
每月一次,免费领取小米云服务会员
查看>>
MapReduce--平均分,最高,低分以及及格率的计算
查看>>
mac下管理论文的工具
查看>>
[c++面试准备]--vector对象是如何增长的
查看>>
【十大经典数据挖掘算法】k
查看>>
POJ3122Pie(二分)
查看>>
114. Flatten Binary Tree to Linked List
查看>>
WF+WCF+WPF第二天--模拟超市收银
查看>>
爬取贴吧好看的桌面图片 -《狗嗨默示录》-
查看>>
Bellman-Ford
查看>>