ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 关于nvl的迷惑

标题: 关于nvl的迷惑
离线 pika
我曾那么接近幸福


精华贴数 0
个人空间 0
技术积分 212 (9071)
社区积分 19 (7848)
注册日期 2001-12-20
论坛徽章:0
      
      

发表于 2002-1-11 10:10 
关于nvl的迷惑

在我不输入参数(字符型)的情况下,下面这个sql执行不出来
select ....from a,b
where a.id = b.id
and a.x like nvl(_p,'%')
而这样就执行的出来
select ....from a,b
where a.id = b.id
and a.x like '%'



__________________
心在荒村听雨
只看该作者    顶部
离线 hyacinth
学无止境



精华贴数 1
个人空间 0
技术积分 792 (2435)
社区积分 181 (2565)
注册日期 2002-1-7
论坛徽章:2
ITPUB元老授权会员    
      

发表于 2002-1-11 10:47 
你可以试着这么写
1.
select ....from a,b
where a.id = b.id
and ((:a is not null and a.x = :a )
       or (:a is null))


:a 是那个变量,如果变量不为空则a.x=:a,否则就不判断这个条件.看你的程序,好象是要实现这个功能.

2.
select ....from a,b
where a.id = b.id
and a.x like decode(:a,null,'%',:a);

需要说明一下:
象这样的 where a.x like '%'  条件,a.x是空值的不会包括在其中.

写完一个sql语句检查一下,取出的结果是否是你想要的,或看看有没有遗漏的吧!




__________________
没有比人更高的山,        没有比脚更长的路.Email: Hyacinth@itpub.net
只看该作者    顶部
离线 pika
我曾那么接近幸福


精华贴数 0
个人空间 0
技术积分 212 (9071)
社区积分 19 (7848)
注册日期 2001-12-20
论坛徽章:0
      
      

发表于 2002-1-11 12:42 
奇怪,这样就可以
select ....from a,b
where a.id = b.id
and (:a is not null and a.x like :a)
or (:a is null and a.x like '%'))
用nvl和decode都执行不过去,这是怎么回事?


__________________
心在荒村听雨
只看该作者    顶部
离线 hyacinth
学无止境



精华贴数 1
个人空间 0
技术积分 792 (2435)
社区积分 181 (2565)
注册日期 2002-1-7
论坛徽章:2
ITPUB元老授权会员    
      

发表于 2002-1-11 14:19 
你是怎么写的呀!把你的出错信息也贴出来啊!


__________________
没有比人更高的山,        没有比脚更长的路.Email: Hyacinth@itpub.net
只看该作者    顶部
离线 scwang
中级会员



精华贴数 2
个人空间 0
技术积分 745 (2589)
社区积分 269 (2074)
注册日期 2001-12-3
论坛徽章:2
ITPUB元老授权会员    
      

发表于 2002-1-11 22:30 
Re: 关于nvl的迷惑



QUOTE:
最初由 pika 发布
在我不输入参数(字符型)的情况下,下面这个sql执行不出来
select ....from a,b
where a.id = b.id
and a.x like nvl(_p,'%')
而这样就执行的出来
select ....from a,b
where a.id = b.id
and a.x like '%'


函数nvl(_p,'%') 返回一串字符,不含有引号,而使用like加通配符的方式,须得显示地用'将%括起来


__________________
no more
只看该作者    顶部
离线 流云飞天
孤影萍踪



精华贴数 0
个人空间 0
技术积分 186 (10122)
社区积分 0 (51176)
注册日期 2002-1-10
论坛徽章:0
      
      

发表于 2002-1-12 09:51 
我的建议……

这样写:
select ....from a,b
where a.id = b.id
and ( :a is null or  a.x = :a );
参见我的帖子《静态 SQL语句中的“动态”功能 》
http://www.itpub.net/showthread.php?s=&threadid=12262


__________________
忧郁的眼睛真诚的心,相识相知愿与君。redsun_shine@sina.com路漫漫,吾上下而求索之修者,远兮!小的时候,不知道理想是什么;长大以后,又不知什么是理想……
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问