oracle只有当where子句中所有条件都使用"=:"才认为是使用绑定变量么?

oracle只有当where子句中所有条件都使用"=:"才认为是使用绑定变量么?

select col1,col2,col3,col4,col5
from tab1
where col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
/

在使用v$sqlarea中类似上面的语句出现了1万多次,应该能确认这样的语句是没有很好使用绑定变量吧。
我的疑问:
1.如果条件一和条件二的内容就是这样固定的,没有变化,只是第三个条件使用了"=:"形式,是不是oracle认为这样的SQL不能算是使用绑定变量,不会在shared pool中进行缓存?
2.是不是在where子句中每个条件都要是"=:"形式才可以?感觉oracle有点傻的说。
3.好多SQL语句都是通过众多服务拼凑出来的,可能不全是"=:"形式,那岂不是都修改?大家有遇到这样类似的问题么。
4.大家在处理这些没有很好使用绑定变量问题的时候都有哪些可行的方案呢。
5.例如就是是上面的结构,怎么写才能让oracle认为这个要被反复的使用,在shared pool中多停留呢。
6.对于or和in的条件子句应该如何调整呢。

关于绑定变量的理解还有待提高,还请朋友们多多帮助。


===============================================================

在各位老大的提示下,我终于明白我所提的问题描述和理解上有问题。

我使用的查询语句是:

select substb(sql_text,1,120),count(1)
from v$sqlarea
group by substb(sql_text,1,120)
having count(1)>400
order by count(1) desc
/

然后使用的v$sqltext_with_newlines查询到其中一个hash对应的SQL。
实际上对应的SQL有很多,我所写的结构只是其中的一个,在我全部列选所有SQL语句后,其后面的结构是不一样的,都是太长的SQL语句扰乱了我的思维(其实是水平有待提高)。在我把 substb(sql_text,1,120) 放大到 substb(sql_text,1,450) 后发现了一个问题,在450之后有好多like ***%'(***代表不同的值)结构的条件,所以SQL的样子不相同,当然hash_value都不一样了

类似结构是:
select col1,col2,col3,col4,col5
from tab1
where col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
and col4 like '***%'    ------------没有取出全部的SQL内容
/

问题提的不正确,请大家原谅,
目前发现了这些SQL语句的问题,应该将那些like后面的条件让应用人员进行调整。

但是还有一个问题:
如果结构就是
select col1,col2,col3,col4,col5
from tab1
where
col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
/
其中的条件
col1='1'
and col2 in ('000','001','003','004','005')
是固定不变的,没有写成"=:"的形式,在v$sqlarea中是不是应该只是出现一次,在这种情况下,这样的语句会被重用么?
换一种说法:是不是在v$sqlarea上取到的次数为1的那些SQL均会被ORACLE重用?
(个人认为是可以的)

有专门介绍ORACLE处理绑定变量机制方面的资料么。这方面还真需要好好学习学习。

[ 本帖最后由 secooler 于 2007-12-13 17:44 编辑 ]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-555639/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/519536/viewspace-555639/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值