令人比较费解的问题

cjcwqp 2006-03-01 03:25:13
这是本人写的一个过程其中一部分,原来的:
create or replace procedure sp_testsqlfor1(cMsisdn in varchar2,cCalQj in varchar2, feesum out number) is
.....
if i<>28 then
cLSql:=' select MSISDN,(Fee1+Fee2+Fee3+Fee4+Fee5) FEESUM from bill.mb_detailgp_'||cYear||cMonth||cDay||'@bill'||chr(13)||chr(10)
||' where msisdn=:cMsisdn'||chr(13)||chr(10)
||' union all'||chr(13)||chr(10);
dbms_output.put_line('csql'||to_char(i,'00')||chr(13)||chr(10)||clsql);
else
cLSql:=' select MSISDN,(Fee1+Fee2+Fee3+Fee4+Fee5) FEESUM from bill.mb_detailgp_'||cYear||cMonth||cDay||'@bill'||chr(13)||chr(10)
||' where msisdn=:cMsisdn'||chr(13)||chr(10);
dbms_output.put_line('csql'||to_char(i,'00')||chr(13)||chr(10)||clsql);
end if;
cSql:=cSql||cLSql;
end loop;

end if;
......
cSql:='SELECT SUM(feesum) feesum from ('||chr(13)||chr(10)
||cSql||chr(13)||chr(10)
||') '||chr(13)||chr(10)
||'GROUP BY MSISDN';
--dbms_output.put_line(csql);
--'MERGE INTO USING
execute immediate cSql into feesum using cmsisdn,cCalQj ;
end sp_testsqlfor1;
编译成功,测试提示:ORA-01008:并非所有变量都已关联

修改后的:
create or replace procedure sp_testsqlfor1(cMsisdn in varchar2,cCalQj in varchar2, feesum out number) is
.....
if i<>28 then
cLSql:=' select MSISDN,(Fee1+Fee2+Fee3+Fee4+Fee5) FEESUM from bill.mb_detailgp_'||cYear||cMonth||cDay||'@bill'||chr(13)||chr(10)
||' where msisdn=:cMsisdn'||chr(13)||chr(10)
||' union all'||chr(13)||chr(10);
dbms_output.put_line('csql'||to_char(i,'00')||chr(13)||chr(10)||clsql);
else
cLSql:=' select MSISDN,(Fee1+Fee2+Fee3+Fee4+Fee5) FEESUM from bill.mb_detailgp_'||cYear||cMonth||cDay||'@bill'||chr(13)||chr(10)
||' where msisdn=:cMsisdn'||chr(13)||chr(10);
dbms_output.put_line('csql'||to_char(i,'00')||chr(13)||chr(10)||clsql);
end if;
cSql:=cSql||cLSql;
end loop;

cSql:='SELECT SUM(feesum) feesum from ('||chr(13)||chr(10)
||cSql||chr(13)||chr(10)
||') '||chr(13)||chr(10)
||'GROUP BY MSISDN';
--dbms_output.put_line(csql);
--'MERGE INTO USING
execute immediate cSql into feesum using cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,
cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn,cmsisdn ;
end if;
....
end sp_testsqlfor1;
编译成功,测试成功.
使用oracle9i,oracle怎么会这样呢?重复的同名变量要全列出来,真是奇怪!
...全文
104 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobfang 2006-03-01
  • 打赏
  • 举报
回复
因为execute immediate ... using ...是按位置绑定参数,而不是按名字的。
cjcwqp 2006-03-01
  • 打赏
  • 举报
回复
请高手指点!

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧