晚上写点东西,本来心情挺好,没想到经历一场噩梦。
tsql := 'merge into haref2 a using (select refer,refered,refer_exp,level rlevel
from harefer start with refered=:tcellid connect by refered=prior refer) b
on (a.refer=b.refer and a.refered=b.refered and a.tempid=:tid)
when matched then update set a.rlevel=b.rlevel
when not matched then insert values (b.refer,b.refered,b.refer_exp,:tid,b.rlevel)';
execute immediate tsql using rec_val.refered,ai_tempid,ai_tempid;
上面的语句挺正常吧,可执行的时候偏偏抛出ORA-01008 not all variables bound的异常,郁闷,一点一点找,没问题啊。
把内容换成相关的insert和update,正常,-_-!
经历了近一个小时的折磨,发现在9.2.0.1.0中不行,10g中没问题,我。。不让绑定变量,咱就直接执行,更痛苦的事情发生了。过程体中执行
merge into haref2 a using (select refer,refered,refer_exp,level rlevel
from harefer where refered=[color=#FF00FF]cellid )[/color] b
on (a.refer=b.refer and a.refered=b.refered and a.tempid=ai_tempid)
when matched then update set a.rlevel=b.rlevel
when not matched then insert (refer,refered,refer_exp,tempid,rlevel)
values (b.refer,b.refered,b.refer_exp,ai_tempid,b.rlevel);编译通过,执行正常,就是结果不对,该插入没插入,有点蒙,复制出去,变量换常量,正常,再复制进来,常量换变量,问题依据。
当时翻了翻桌上的台历,看看今天是不是有什么忌讳,比如说,不易写sql,结果,没有,那就继续。过程体中变量换成常量,正常了。
有点抓狂。想想,oracle不至于缺心眼到这地步,把蓝色部分的结果集合放到一个表中,其他的常量换回变量,一切正常,我。。
因为是在过程的循环体中,难不成让我把循环生成的结果集放在临时表中再用merge?
4个小时光和他耗了。娘的,老爷我不干了。
这才有以上文字。
tsql := 'merge into haref2 a using (select refer,refered,refer_exp,level rlevel
from harefer start with refered=:tcellid connect by refered=prior refer) b
on (a.refer=b.refer and a.refered=b.refered and a.tempid=:tid)
when matched then update set a.rlevel=b.rlevel
when not matched then insert values (b.refer,b.refered,b.refer_exp,:tid,b.rlevel)';
execute immediate tsql using rec_val.refered,ai_tempid,ai_tempid;
上面的语句挺正常吧,可执行的时候偏偏抛出ORA-01008 not all variables bound的异常,郁闷,一点一点找,没问题啊。
把内容换成相关的insert和update,正常,-_-!
经历了近一个小时的折磨,发现在9.2.0.1.0中不行,10g中没问题,我。。不让绑定变量,咱就直接执行,更痛苦的事情发生了。过程体中执行
merge into haref2 a using (select refer,refered,refer_exp,level rlevel
from harefer where refered=[color=#FF00FF]cellid )[/color] b
on (a.refer=b.refer and a.refered=b.refered and a.tempid=ai_tempid)
when matched then update set a.rlevel=b.rlevel
when not matched then insert (refer,refered,refer_exp,tempid,rlevel)
values (b.refer,b.refered,b.refer_exp,ai_tempid,b.rlevel);编译通过,执行正常,就是结果不对,该插入没插入,有点蒙,复制出去,变量换常量,正常,再复制进来,常量换变量,问题依据。
当时翻了翻桌上的台历,看看今天是不是有什么忌讳,比如说,不易写sql,结果,没有,那就继续。过程体中变量换成常量,正常了。
有点抓狂。想想,oracle不至于缺心眼到这地步,把蓝色部分的结果集合放到一个表中,其他的常量换回变量,一切正常,我。。
因为是在过程的循环体中,难不成让我把循环生成的结果集放在临时表中再用merge?
4个小时光和他耗了。娘的,老爷我不干了。
这才有以上文字。
解决方案 »
- oracle 存储过程 各位朋友帮忙 初学者
- Oracle In 查询
- 对分区表有深刻理解的高手请进
- 各位帮忙啊,我如何用TOAD工具完整的备份数据库呢,我没有找到,,难道ORA的备份真的不如MSSQL方便吗?
- proc*c访问oracle中的blob字段类型
- 在线等待:为什么服务管理器中出现了listenerlistenser?
- 怎么写这个for循环?(在线等待)
- 请问高手:如何将数据集的某一字段与另一个相同行数的多字段数据集合并?
- Database link的语法
- oracle apex 新编了个报表系统,能实现分层次填报和汇总。感觉apex挺好的。感兴趣的可以交流一下。
- oracle10g连接拒绝异常
- 请问 PL/SQL Developer 7.1支持shortcuts这个插件吗?
编辑过程中有点错误。 cellid 也是一个变量,游标中的,没问题。红色部分变量是过程的参数,有子查询的情况下不能使用。
主啊,饶了我吧。
为了不白放分,哪位仁兄提供一个9.2.0.5 for solaris的补丁包,溜了一遍,没看到for solaris的。
楼主既然用9,直接找9.2.0.8的包不行吗?
下载 适用于 Solaris 操作系统 (SPARC)(64 位)
下载 适用于 Linux x86-64
下载 适用于基于 AIX 5L 的系统(64 位)
下载 适用于 HP-UX PA-RISC(64 位)
链接在:
http://www.oracle.com/technology/global/cn/software/products/database_vault/index.html
是不是可以试下别的的方式调用这个语句呢?
比如说在java里面用绑定变量调用试下我帮查了下,asktom和oracle forum上面没有查到相关的信息
这个基本上和楼主的问题一样:
http://www.itpub.net/thread-430310-1-1.html这是用dblink时出现的ora-01008
http://grouchgeek.blogspot.com/2008/08/ora-01008-on-plsql-merge-over-link.html
http://dbaspot.com/f2/oracle-merge-remote-db-ora-01008-not-all-variables-bound-66158.html这是用分区表时出现的:
http://www.orafaq.com/forum/t/100888/0/这是使用oc4j时出现的
http://forums.oracle.com/forums/thread.jspa?threadID=46036看起来,oracle写一块代码时请了个菜鸟,呵呵
这个地址不错
正式环境为 10,一切正常。
呵呵,同情lz
大家都在等结果呢
在window下,升级到9.2.0.8后,问题解决。