zoukankan      html  css  js  c++  java
  • 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。如下所示

  • 相关阅读:
    用laravel写的项目如何布置在虚拟机上
    在Laravel中注册中间件
    ssh出错
    DB2单表导入导出
    DB2 还原数据库
    ssh-keygen 免交互
    DB2 命令
    21个项目玩转深度学习:基于TensorFlow的实践详解06—人脸检测和识别——数据集
    jieba—parallel
    更新数据
  • 原文地址:https://www.cnblogs.com/beijingstruggle/p/7237915.html
Copyright © 2011-2022 走看看