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

[复制链接]
查看11 | 回复1 | 2007-4-25 04:02:08 | 显示全部楼层 |阅读模式
今天在上班时,遇到了一个相当牛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_。
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
低级错误,可以去看大师的规范,steven有专门的pl/sql开发规范
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行