oracle sql语句高手请进,为什么这句话无法执行,好像上了锁,来解一下吧!

signboy 2001-07-16 11:52:25
这句话无法执行,好像上了锁,两个子查询访问相同(大多数)的几个表,分别执行没问题,合在一块,就不行了!

select aa.fahuor,aa.chepihao,aa.price - bb.price dd
from
(select f.chepihao chepihao,f.fahuor fahuor,round((a.value_s+a.value_x)*a.bijia*b.bijia*c.bijia*d.bijia*e.bijia_a*e.bijia_kp*decode(sign(e.qnet_zuidi-f.qnet),1,0,1)/2,1) price
from meijia_bijia a,meijia_bijia b,meijia_bijia c,meijia_bijia d,meijia_hetong e,tcepihao f
where a.bijiacont='Qnet.ar' and b.bijiacont='Vdaf' and c.bijiacont='Std' and d.bijiacont='Aar'
and e.kuangming=f.kuangming
and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)>a.value_s and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)<=a.value_x and f.Vdaf>b.value_s and f.Vdaf<=b.value_x
and f.stad>c.value_s and f.stad<=c.value_x and f.aar>d.value_s and f.aar<=d.value_x
and e.kuangming='0107'
and to_char(f.fahuor,'MM/YY')='06/01' WITH READ ONLY ) aa ,
(select f.chepihao chepihao,f.fahuor fahuor,round((a.value_s+a.value_x)*a.bijia*b.bijia*c.bijia*d.bijia*e.bijia_a*e.bijia_kp*decode(sign(e.qnet_zuidi-f.qnet),1,0,1)/2,1) price
from meijia_bijia a,meijia_bijia b,meijia_bijia c,meijia_bijia d,meijia_hetong e,schepihao f
where a.bijiacont='Qnet.ar' and b.bijiacont='Vdaf' and c.bijiacont='Std' and d.bijiacont='Aar'
and e.kuangming=f.kuangming
and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)>a.value_s and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)<=a.value_x and f.Vdaf>b.value_s and f.Vdaf<=b.value_x
and f.stad>c.value_s and f.stad<=c.value_x and f.aar>d.value_s and f.aar<=d.value_x
and e.kuangming='0107'
and to_char(f.fahuor,'MM/YY')='06/01' WITH READ ONLY ) bb
where aa.fahuor=bb.fahuor and aa.chepihao=bb.chepihao ;
...全文
186 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldwain 2001-07-20
  • 打赏
  • 举报
回复
呵呵。。。
signboy 2001-07-20
  • 打赏
  • 举报
回复
结果呱呱叫,与select /*+ NO_MERGE(aa) NO_MERGE(bb) */ aa.fahuor,aa.chepihao,aa.price - bb.price dd 的效果是一样的,
其实不加夜市可以的,但好像需要4\5分钟,

我就说,oracle 是狗屎,

oldwain 2001-07-20
  • 打赏
  • 举报
回复
分数无所谓。
但一定要告诉我结果!
oldwain 2001-07-18
  • 打赏
  • 举报
回复
试试no_merge hint。
select /*+ NO_MERGE(aa) NO_MERGE(bb) */ aa.fahuor,aa.chepihao,aa.price - bb.price dd .............


不能确定是否一定管用, 但不妨一试.
把结果告诉我.
signboy 2001-07-18
  • 打赏
  • 举报
回复
没有任何出错信息,语法完全正确,每个子查询都顺利通过,
症状就是保持查询状态,但不返回任何结果,
数据量不是很大,

oldwain 2001-07-18
  • 打赏
  • 举报
回复
能否告知出错信息?

如果是有关temp表空间方面的错误,原因可能是:
由于自连接时没有连接条件,可能会形成很大的笛卡儿结果集,从而造成temp表空间不够。
signboy 2001-07-17
  • 打赏
  • 举报
回复
其实,解决一个问题有好多办法,我找了一个更好的,
把select的数据分别update到一张表的不同字段,然后,对这两个字段作差,ok!
但是,我不理解的是,为什么两个select 语句得出的结果连接之后,为什么不行,正如上面!
有机会,我把上述语句逐个减少,直到通过!但我还是想知道大家的看法/
hailong525 2001-07-16
  • 打赏
  • 举报
回复
这种情况下,跟锁没有关系!
hailong525 2001-07-16
  • 打赏
  • 举报
回复
1.不妨到sqlPlus下执行一下!
2.有些工具限制sql语句的字符数!
3.一帮情况下,若分开能够执行的话,合在一起应该没问题!
signboy 2001-07-16
  • 打赏
  • 举报
回复
还有,如何察看锁的情况
Stingray 2001-07-16
  • 打赏
  • 举报
回复
你用的是什么方法? 如果在windows下运行这么大的查询,我认为还是用SQL好一点
signboy 2001-07-16
  • 打赏
  • 举报
回复
看来今天没高人。
问题已解决,不过是用其他办法,!
但我仍然想知道,这句化为什么不行,我想原因有以下可能,希望来人能证实:
1。oracle中只能允许至多7个自连接(我用了8个),
2。oracle中不允许连接的表超过12个
3。oracle不支持大的查询
4。oracle是狗屎



signboy 2001-07-16
  • 打赏
  • 举报
回复
就是在sqlPlus里执行的呀!
为什么和锁没关系,
给大家结构化一下,
select aa.fahuor,aa.chepihao,aa.price - bb.price dd
from
(select f.chepihao chepihao,f.fahuor fahuor,
round((a.value_s+a.value_x)*a.bijia*b.bijia*c.bijia*d.bijia*e.bijia_a*e.bijia_kp*decode(sign(e.qnet_zuidi-f.qnet),1,0,1)/2,1) price
from meijia_bijia a,meijia_bijia b,meijia_bijia c,meijia_bijia d,meijia_hetong e,tcepihao f
where a.bijiacont='Qnet.ar' and b.bijiacont='Vdaf'
and c.bijiacont='Std' and d.bijiacont='Aar'
and e.kuangming=f.kuangming
and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)>a.value_s
and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)<=a.value_x and f.Vdaf>b.value_s and f.Vdaf<=b.value_x
and f.stad>c.value_s and f.stad<=c.value_x and f.aar>d.value_s
and f.aar<=d.value_x
and e.kuangming='0107'
and to_char(f.fahuor,'MM/YY')='06/01' WITH READ ONLY
) aa ,
(select f.chepihao chepihao,f.fahuor fahuor,
round((a.value_s+a.value_x)*a.bijia*b.bijia*c.bijia*d.bijia*e.bijia_a*e.bijia_kp*decode(sign(e.qnet_zuidi-f.qnet),1,0,1)/2,1) price
from meijia_bijia a,meijia_bijia b,meijia_bijia c,meijia_bijia d,meijia_hetong e,schepihao f
where a.bijiacont='Qnet.ar' and b.bijiacont='Vdaf' and c.bijiacont='Std' and d.bijiacont='Aar'
and e.kuangming=f.kuangming
and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)>a.value_s
and decode(sign(f.qnet-qnet_zuigao),-1,f.qnet,0,qnet_zuigao,1,qnet_zuigao)<=a.value_x
and f.Vdaf>b.value_s and f.Vdaf<=b.value_x
and f.stad>c.value_s and f.stad<=c.value_x and f.aar>d.value_s and f.aar<=d.value_x
and e.kuangming='0107'
and to_char(f.fahuor,'MM/YY')='06/01' WITH READ ONLY
) bb
where aa.fahuor=bb.fahuor and aa.chepihao=bb.chepihao ;

2,598

社区成员

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

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