merge 的问题,其郁闷无比

jdsnhan 2008-12-31 12:38:16
晚上写点东西,本来心情挺好,没想到经历一场噩梦。
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个小时光和他耗了。娘的,老爷我不干了。
这才有以上文字。
...全文
336 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
h140465 2010-05-12
  • 打赏
  • 举报
回复
我也遇到这样的问题,真郁闷啊
jdsnhan 2009-01-07
  • 打赏
  • 举报
回复
这两天和我的小猫做斗争了,在把他大卸等我数数几块啊,连带螺丝一共七块之后,他还是不能上网。今天买个新的去。

因为solaris下的测试环境一直有人用,所以,没有打补丁。
在window下,升级到9.2.0.8后,问题解决。
oraclelogan 2009-01-05
  • 打赏
  • 举报
回复
楼主的结果怎么样,如何解决的问题?
AFIC 2009-01-04
  • 打赏
  • 举报
回复
>>过程体中变量换成常量,正常了

CHAR字段没TRIM的预感。
xiaoxiao1984 2009-01-04
  • 打赏
  • 举报
回复
呼呼,补丁咋样呢
结果呢?
oraclelogan 2009-01-04
  • 打赏
  • 举报
回复
不知道楼主具体怎么解决的bug,楼主说下,介绍下经验吧!
又是违规昵称 2009-01-04
  • 打赏
  • 举报
回复
是bug吗?怎样解决的啊?
大家都在等结果呢
jdsnhan 2009-01-04
  • 打赏
  • 举报
回复
再顶上来,看看还有没有留脚印的。
hebo2005 2009-01-02
  • 打赏
  • 举报
回复
这个散分贴不错
hugh_9 2009-01-02
  • 打赏
  • 举报
回复
一个小bug 足可以让人抓狂
呵呵,同情lz
李敏910 2009-01-02
  • 打赏
  • 举报
回复
你的代码,感觉和编程语言挺像的。
oraclelogan 2009-01-02
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 hebo2005 的回复:]
这个散分贴不错
[/Quote]

黄道吉日,楼主发帖,介绍经验,同时散分!

恭喜楼主,贺喜楼主,2009年三子登科
jdsnhan 2009-01-01
  • 打赏
  • 举报
回复
我是就元旦机会给大家放点分,嘿嘿
打完补丁后告诉大家结果
jdsnhan 2008-12-31
  • 打赏
  • 举报
回复
又查了查,有人说是2.0.1的bug,先升级44.
为了不白放分,哪位仁兄提供一个9.2.0.5 for solaris的补丁包,溜了一遍,没看到for solaris的。
jdsnhan 2008-12-31
  • 打赏
  • 举报
回复
沙发自己坐。
编辑过程中有点错误。 cellid 也是一个变量,游标中的,没问题。红色部分变量是过程的参数,有子查询的情况下不能使用。
主啊,饶了我吧。
jdsnhan 2008-12-31
  • 打赏
  • 举报
回复
9.2.0.1测试环境中问题依旧,只好通过insert +update回避,准备打个补丁,再看看效果。
正式环境为 10,一切正常。
icss_zhen 2008-12-31
  • 打赏
  • 举报
回复
看了帖啊,不由的大笑,lz文字很幽默啊
vc555 2008-12-31
  • 打赏
  • 举报
回复
LZ解决了吗?
jdsnhan 2008-12-31
  • 打赏
  • 举报
回复
http://fourfire.javaeye.com/blog/162286
这个地址不错
又是违规昵称 2008-12-31
  • 打赏
  • 举报
回复
我这里打得开啊...

换了关键字,用ORA-01008 merge查,找到了一些信息,bug的可能性很大
这个基本上和楼主的问题一样:
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)

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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