表与表的关系把RD搞乱了,记一个Procedure中的bug

简介: 就是6张表的关联查询,写了一个存储过程,使用4层for来处理 bug:最后一个for中,两张表的关联条件少了一个,结果数据多查了。 排查办法:使用dbms_output.printline('');每一个for中加一个 dbms_output.

就是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

相关文章
|
7天前
|
Ubuntu 关系型数据库 MySQL
表明明存在,但是就是报错表不存在
表明明存在,但是就是报错表不存在
10 0
|
4月前
|
SQL Oracle 关系型数据库
SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作。FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键。具有外键的表称为子表,具有主键的表称为被引用表或父表。
87 0
SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
|
5月前
|
SQL 关系型数据库 MySQL
sql处理重复的列,更好理清分组和分区
sql处理重复的列,更好理清分组和分区
46 0
|
SQL 数据挖掘 测试技术
软件测试|SQL分类大概有几种?SQL中什么是主键和外键,它们之间的区别是什么?
软件测试|SQL分类大概有几种?SQL中什么是主键和外键,它们之间的区别是什么?
223 0
|
SQL 数据库 索引
SQL中,表之间的左联和右联是什么意思
SQL中,表之间的左联和右联是什么意思
102 0
|
机器学习/深度学习 Java 测试技术
JPA利用specification机制进行表连接查询的问题记录
采用root.join连接表过程中注意点
973 0
|
数据库 缓存 索引
关系数据库设计中,用中间表好还是直接设定主外键关联好?
有人会对数据库有这样的疑问: 因为大多数的数据库教程上都是告诉你关系数据库如何去创建1:1、1:N和N:M的数据库关系,但我发现很多开源产品中,并没有直接使用关系数据库的关系查询、关系删除等功能,而是直接在代码中对多个表的查询结果进行组合。
2332 0
|
Java 数据库
不设外键:用程序来实现表之间的关联
Association 相信有很多同学都有使用过Hibernate框架的开发经验,尽管现在开发人员对Hibernate的褒贬不一,我们暂且不谈这个话题。
1706 1
|
SQL MySQL 关系型数据库
(细节)My SQL中主键为0和主键自排约束的关系
开始不设置主键 表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增;   Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样;   现在主键是没有0的,如果把某个id改成0的话,0不会变!直接会进行排序;   ...
1121 0
|
SQL 关系型数据库 MySQL
(解释文)My SQL中主键为0和主键自排约束的关系
  上一篇我们说了关于自排如果主键是0的问题,在这里我搞清楚了原因,导致这种情况是因为在SQL中对自排设置了初始值:      从这里可以看到这两个变量一个是自增的初始值,一个是增量,这里都是1,所以在设置自增的时候会把那个字段原来存在的所有0变成从1开始的步长为1的等差数列。
979 0