表与表的关系把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

时间: 2024-10-06 21:25:49

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

表与表之间建关系

一.一对多 1.确立表与表之间的关系 一定要换位思考(必须两方都考虑周全之后才能得出结论) 以员工表和部门表为例: 1.先站在员工表看能否有多个员工对应一个部门 翻译过来: 一个部门能否有多个员工 可以!!!(暂时只能确定员工单向多对一部门) 2.再站在部门表看能否有多个部门对应一个员工 翻译过来: 一个员工能否属于多个部门 不可以!!! 结论:员工表和部门表之间仅仅是单向的多对一 那么它们的表关系就是"一对多" 表关系中没有多对一一说,只有一对多 (无论是多对一还是一对多都叫&quo

表与表的关系

表与表的关系    >>>思维导图>>>中二青年 表与表之间的关系 所有信息都记录在一张表中所带来的问题 1.表的结构不清晰 2.浪费硬盘空间 3.表的扩展性极差(无法忽略的缺点) 类似于我们将所有的代码都写在同一个py文件内 确立表与表之间的关系一定要换位思考(必须两方都考虑周全之后才能得出结论) 一对多关系 以员工表和部门为例 先站在员工表看,一个部门可以有多个员工 再站在部门表看,一个员工不能属多个部门 结论:员工表和部门表之间仅仅是单向的多对一,那么他们的表关系

第四天,表与表之间的关系,一对多,多对多,查询

※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE variable_name LIKE 'character%'; 解决MySQK的中文乱码:character_set_client,character_set_connection和character_set_results这三者必须一致(GBK,GB2312,UTF8这三者都可以,但若采用其中一种则3

MySQL---数据库从入门走上大神系列(四)-子查询、表与表之间的关系

本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系! 准备: 首先我们创建一列sex.再为部分行设置好值0(女)或者1(男): delete from stud where age=26; 删除年龄为26的行. update stud set sex='1' where saddress like '湖南%'; 将地址中湖南开头的人的的sex修改为1. update stud set sex='0' where age>=30 and sex is null;

mysql表与表之间的关系(多对多,一对多)

#创建数据库CREATE DATABASE day15;#使用USE day15;#创建表CREATE TABLE test1( id INT PRIMARY KEY AUTO_INCREMENT,#这是主键 num INT UNIQUE, #这个唯一键不起作用? NAME VARCHAR(22));#存入数据INSERT INTO test1(NAME) VALUES('aaa'); #删除数据但是不重置自动增长数DELETE FROM test1; #删除数据重置行数(相当于删除掉整个表,然

表与表之间关系回顾

------------------siwuxie095 表与表之间关系回顾 1.一对多 (1) 1)场景:分类和商品的关系 2)描述:一个分类里面有多个商品,一个商品只能属于一个分类 (2) 1)场景:客户和联系人的关系 2)描述:一个客户里面有多个联系人,一个联系人只能属于一个客户 注意:这里的客户是公司级的,即 公司,联系人 即 公司里的员工,实 际上就是公司和员工的关系 (3)一对多建表:通过外键建立关系 在多的那一方创建字段作为外键,指向一的那一方的主键 客户: cid cname 1

ORM SQLAlchemy 表于表的关系

1表与表之间三种关系 1.1 一对一关系 举例: 一个丈夫对应一个妻子,一个妻子对应一个丈夫 1.2 一对多关系 举例:一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆 分析:这种情况其实也可以采用 一张表,但因为一个人可以拥有多辆汽车,如果采用一张表,会造成冗余信息过多.好的设计方式是,人和车辆分别单独建表,那么如何将两个表关联呢?有个巧妙的方法,在车辆的表中加个外键字段(人的编号)即可. 1.3 多对多关系 例如:学生选课,一个学生可以选修多门课程,每门课程可供多个学生选择. 分析:这种

ts包、表、子表、section的关系

我们经常接触到创建 DEMUX,注册 Filter 过滤数据, 通过回调过滤出 section 数据,然后我们对 section 数据做具体的解析或者其他操作. 我们这里说的 section 就是段的概念,一个 section 可能包含一个或者多个TS 包,我们可以这样理解,TS 是对数据内容发封装,属于传输层的格式,规定了传输数据的格式,它以 188 字节为单位组成一个 TS 包,在这一层,它不管封装的内容是什么,就是在传输的内容前加 上 4 个字节的头信息组成包.而我们 filter 过滤出

获取完全一样的数据库,包括表与表之间的外键关系,check,default表结构脚本

今天公司给了一个任务,某一个项目由于数据过大,造成Sql Server 2012 的运行占用很大内存,于是要把之前的不常用的数据分开.要求写个脚本,要求: 1.能获取原来数据库中的表结构,主键一致.表与表之间的约束关系(外键,check,default)一致: 2.有些表不想要就不要,可选. 3.而且效率要考虑,这个脚本以后常用. (这里都是本地的测试数据) 软件: Sql Server2012(其他的版本没有亲自试验,不知道效果) 图1:找到原数据库,选择任务-->生成脚本 图2:选择要创建的