ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 存储过程遇到的变量问题

Oracle 存储过程遇到的变量问题

原创 Linux操作系统 作者:wjychl 时间:2010-12-17 21:15:59 0 删除 编辑
今天在上班时,遇到了一个相当牛X的问题,一开始还幼稚的以为发现了Oracle的Bug,后来经过一路调试发现,是因为在存储过程中的一个查询语句 写的有点问题,在这里共享一下。
例:
tab表中有2个字段 a、b

存储过程是这么写的

create or replace procedure proc_test(b varcahr2) as
v_resValue varchar2(100);
begin
select t.a into v_resValue from tab t where t.b = b;
end proc_test;

请注意在where条件t.c=c中,变量名与字段名是一致的,oracle在解析时,就会将变量b作为字段,进行查询所以
select t.a into v_resValue from tab t where t.b = b; 就等同于select t.a into v_resValue from tab t where 1=1;

所以在查询时就会将表中所有记录查询出来,而into的值有切只能有一个值,所以在执行此语句是就会报异常,

解决办法:
将变量名修改,本人自定义一套规范,参数名前加P_,变量名前加v_。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25086534/viewspace-682066/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-12-17

  • 博文量
    21
  • 访问量
    21893