今天写了个存储过程,单步调试不报错,但是update始终不成功,后来上网看了下原来是
写道
今天一个同事写oracle 的存储过程遇到了一个问题, 他在里面update 操作不能完成更新的操作, 但是又不会报错.
如一个表 A(id, code, name, type)
在存储过程中的更新操作的语句: update A x set x.type = 变量A where x.code = 变量B;
变量A 和 变量B 都定义好了, 并且都成功赋值了.
这是一个很简单的更新语句, 简单到一开始对为什么发生这样的错误不知所措. 其实出错的原因是在于 变量A 或 变量B 的定义上, 如:
creat or replace procedure p_AA
is
t_type varchar2(20);
code number(10);
begin
t_type := 'AA';
code := 100
update A x set x.type = t_type where x.code = code ;
commit;
end;
执行成功, 但是update 操作没有成功, 没有报什么错误. 其实原因在于变量code 跟 表A 中的字段code 的名字相同造成的. 看下面的:
creat or replace procedure p_AA
is
t_type varchar2(20);
t_code number(10);
begin
t_type := 'AA';
t_code := 100
update A x set x.type = t_type where x.code = t_code ;
commit;
end;
执行成功, update操作也成功. 所以原因在与变量的名称上面(还有一个值得注意的地方, 如果code字段是char型的, 变量的长度跟字段code的长度如果不一致, 比较会不成功,' 100' 和 '100' 是不对等的, 这也是容易犯的一个错误, 在此记录下)
还有一个地方要注意:
creat or replace procedure p_AA(code in number) --code作为参数, 就算跟表A 的字段名称一样, 也不会有影响
is
t_type varchar2(20);
begin
t_type := 'AA';
update A x set x.type = t_type where x.code = code ;
commit;
end;
执行 execute p_AA(100) 成功, 更新操作也成功. code如果是参数, 跟表A 的字段名称一样, 也不会有影响.
我一般变量都会加t_ 或 p_, 所以以前没遇到这个问题, 为了防止以后可能再次遇到这个问题和也遇到这个问题的朋友, 在此留下这篇博客作为备忘.
犯了第一个错误,所以存储过程始终update不成功,但是,同样的select into中出现重名则不会影响赋值,只用update时候发现了这个问题,
此外在使用pl sql时候,我构造了一个10W+的循环,但是每每700多次就挂掉了,后来发现是 DBMS_OUTPUT.PUT_LINE('XXXXXXXXX'||m);惹的祸,估计是缓存溢出了,我的plsql dbms输出缓冲区大小是10000,原因在这里。一旦超过了就报错。。
此外很多人肯定对plsql或者说DBMS_OUTPUT.PUT_LINE的怨念,因为他是最后输出,而很多时候我们是要求在中间观察进度的,这个是没招的,只能自行设计方案了,无非邮件通知,写表,写文件。
分享到:
相关推荐
整篇文章为个人学习心得,之后会持续发表mysql高级进阶,javaweb框架等知识点文章,制作不易,加个关注 存储过程 优点: 提高开发效率,提高应用程序的性能,简化程序开发人员的操作,减少应用程序和是数据库服务器...
1. 采用共享sql(带占位符或者参数sql). 2. 使用表别名. 3. 尽量避免反复访问同一张表或者几张表,尤其是数据量大的表可考虑提取数据到临时表,然后做链接. ...注意存储过程中参数和数据类型的关系 。
学习管理 在线学习、学习心得、领导批注等 客户管理 会员管理 会员信息管理,即为个人类别的客户 我的客户 个人客户资料、联系记录、需求等 客户管理 管理所有客户资料,联系人、联系记录、需求计划等 进销存类 ...
学习管理 在线学习、学习心得、领导批注等 客户管理 会员管理 会员信息管理,即为个人类别的客户 我的客户 个人客户资料、联系记录、需求等 客户管理 管理所有客户资料,联系人、联系记录、需求计划等 ...
XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET ...
我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的: 第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会; ...
二、学习心得: 其实就是搞清做什么,怎么做的问题,先把流程图画出来,拆解开,一个个做好了然后再合并。理论的东西我不会讲,直接举例哈! function g(o){return document.getElementById(o);} function ...
学习管理--- 在线学习、学习心得、领导批注等 客户管理: 会员管理 --- 会员信息管理,即为个人类别的客户 我的客户 --- 个人客户资料、联系记录、需求等 客户管理 --- 管理所有客户资料,联系人、联系记录、...
在学习单片机的过程中Proteus软件可以很好地代替开发板进行仿真实验,可以使学生比 较灵活多样化的学习单片机。 3.动态数码管设计任务与要求 课程设计功能: 单片机采用定时器中断方法,制作一个简易时钟,要求用...
% 经常有师弟师妹问我怎样学习LDPC码,现在我将个人学习LDPC码的心得写在下面,以供参考。 % 1. 了解LDPC码的基本概念(主要是校验矩阵与Tanner图的关系)之后,学习LDPC码的和积译码算法。这里建议首先用概率测度...
“现有题量”显示了本章节所储存的“考试题”和“练习题”的总量。 3、试卷管理: 试卷类型分两类,随机试卷和人工出卷。随机试卷必须在“题型管理”中添加“题量”和“分值”。而人工出题的试卷在添加过程中需要从...
欢迎大家光临我的站点,互相学习,共同进步;再次感谢一些提供光盘制作资料的朋友们 。经过了数次修改之后这个手册的内容越来越丰富,收藏教程图文并茂,提供小插件文件;真的祝愿大家拥有一册,快速成为光盘制作高手!在...