zoukankan      html  css  js  c++  java
  • 表与表的关系把RD搞乱了,记一个Procedure中的bug

    就是6张表的关联查询,写了一个存储过程,使用4层for来处理

    bug:
    最后一个for中,两张表的关联条件少了一个,结果数据多查了。

    排查办法:
    使用dbms_output.printline('');
    每一个for中加一个

    dbms_output.put_line('-3、'||x.name);//把与下层for关联的关键信息打印出来
    dbms_output.put_line('-2、'||x.name);//把与下层for关联的关键信息打印出来
    dbms_output.put_line('-1、'||x.name);//把与下层for关联的关键信息打印出来
    dbms_output.put_line('0、'||x.name);//把与下层for关联的关键信息打印出来
    然后,就顺藤摸瓜了。

    然后在Commnad Window中调用这个存储过程,拿到打印信息

    SQL> set serveroutput on
    SQL> exec sum_num(3,1256);

    总结:
    功能一直要仔细验证,不同角度可以发现问题

    要用dbms_output.put_line来输出语句,遇到以下错误:

    begin user_priv (username => 'hr'); end; 
      
    ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes 
    ORA-06512: at "SYS.DBMS_OUTPUT", line 32 
    ORA-06512: at "SYS.DBMS_OUTPUT", line 97 
    ORA-06512: at "SYS.DBMS_OUTPUT", line 112 
    ORA-06512: at "HR.USER_PRIV", line 20 
    ORA-06512: at line 2

    很显然当我们在输出时,控制输出结果的缓冲大小由DBMS_OUTPUT.ENABLE控制,buffer size默认为20000,每行最大的限制是32k,后面的一个例子是用来说明存储过程是在缓存了所有数据后才将结果返回。所以当我们使用游标进行输出时,如果结果很多,将会超过这个值报ORA-20000, ORU-10027: Buffer overflow, limit of <buf_limit> bytes这个错误 
    解决方法: 
    在存储过程begin后面加 :  DBMS_OUTPUT.ENABLE (buffer_size=>null)     表示没有限制.

    存储过程user_priv 请参考文档:http://www.cnblogs.com/AlbertCQY/archive/2013/03/31/2992471.html

    http://blog.csdn.net/u010033674/article/details/8744588

  • 相关阅读:
    Kinect研究文档
    Unity使用Win10语音
    使用unity2017.3 vuforia7摄像头放大的问题
    Unity响应Android的返回键,退出当前Activity
    unity调用Android百度地图
    Unity带参数的协程
    Android jenkins动态参数配置
    如何下载浏览器视频
    mac 如果修改环境变量
    mac如何修改hosts文件
  • 原文地址:https://www.cnblogs.com/softidea/p/4977717.html
Copyright © 2011-2022 走看看