`

存储过程参数学习心的

阅读更多

今天写了个存储过程,单步调试不报错,但是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存储过程快速了解

    整篇文章为个人学习心得,之后会持续发表mysql高级进阶,javaweb框架等知识点文章,制作不易,加个关注 存储过程 优点: 提高开发效率,提高应用程序的性能,简化程序开发人员的操作,减少应用程序和是数据库服务器...

    oracle学习日志总结

    1. 采用共享sql(带占位符或者参数sql). 2. 使用表别名. 3. 尽量避免反复访问同一张表或者几张表,尤其是数据量大的表可考虑提取数据到临时表,然后做链接. ...注意存储过程中参数和数据类型的关系 。

    VS2010开发的图形化工作流OA

    学习管理 在线学习、学习心得、领导批注等 客户管理 会员管理 会员信息管理,即为个人类别的客户 我的客户 个人客户资料、联系记录、需求等 客户管理 管理所有客户资料,联系人、联系记录、需求计划等 进销存类 ...

    新版协同办公平台OA(Vs2010,C#,Sql Server)

    学习管理 在线学习、学习心得、领导批注等 客户管理 会员管理 会员信息管理,即为个人类别的客户 我的客户 个人客户资料、联系记录、需求等 客户管理 管理所有客户资料,联系人、联系记录、需求计划等 ...

    asp.net知识库

    XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET ...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:  第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会;  ...

    javascript函数的解释

    二、学习心得: 其实就是搞清做什么,怎么做的问题,先把流程图画出来,拆解开,一个个做好了然后再合并。理论的东西我不会讲,直接举例哈! function g(o){return document.getElementById(o);} function ...

    OA系统+手机版源码t源代码

    学习管理--- 在线学习、学习心得、领导批注等 客户管理: 会员管理 --- 会员信息管理,即为个人类别的客户 我的客户 --- 个人客户资料、联系记录、需求等 客户管理 --- 管理所有客户资料,联系人、联系记录、...

    较为全面的基于PROTEUS仿真51单片机动态数码管课程设计(WORD版).doc

    在学习单片机的过程中Proteus软件可以很好地代替开发板进行仿真实验,可以使学生比 较灵活多样化的学习单片机。 3.动态数码管设计任务与要求 课程设计功能: 单片机采用定时器中断方法,制作一个简易时钟,要求用...

    costas_loop代码

    % 经常有师弟师妹问我怎样学习LDPC码,现在我将个人学习LDPC码的心得写在下面,以供参考。 % 1. 了解LDPC码的基本概念(主要是校验矩阵与Tanner图的关系)之后,学习LDPC码的和积译码算法。这里建议首先用概率测度...

    50用户在线考试系统

    “现有题量”显示了本章节所储存的“考试题”和“练习题”的总量。 3、试卷管理: 试卷类型分两类,随机试卷和人工出卷。随机试卷必须在“题型管理”中添加“题量”和“分值”。而人工出题的试卷在添加过程中需要从...

    光盘启动盘制作完全手册1.08

    欢迎大家光临我的站点,互相学习,共同进步;再次感谢一些提供光盘制作资料的朋友们 。经过了数次修改之后这个手册的内容越来越丰富,收藏教程图文并茂,提供小插件文件;真的祝愿大家拥有一册,快速成为光盘制作高手!在...

Global site tag (gtag.js) - Google Analytics