Sql 甲骨文条件何处
您好,我正在尝试添加条件where,因此当参数ClientId不是“”时,应该在where中使用它的值,但如果ClientId为=“”,则不应该应用where 我试过这个,但这一直给我空的结果Sql 甲骨文条件何处,sql,oracle,Sql,Oracle,您好,我正在尝试添加条件where,因此当参数ClientId不是“”时,应该在where中使用它的值,但如果ClientId为=“”,则不应该应用where 我试过这个,但这一直给我空的结果 DEFINE ClientId = '123'; : : WHERE (('&ClientId' <> '' AND Delivery.Client.CLNT_ID = 100038324) OR ('&ClientId' = '')) DEFINE ClientId='1
DEFINE ClientId = '123';
:
:
WHERE (('&ClientId' <> '' AND Delivery.Client.CLNT_ID = 100038324) OR ('&ClientId' = ''))
DEFINE ClientId='123';
:
:
其中(“&ClientId”和Delivery.Client.CLNT_ID=100038324)或(“&ClientId'=“”))
您需要检查是否为空
或是否不为空
。。Oracle中的空字符串“”被视为NULL
值,anything=NULL
为“false”
试试这个:
drop table junk;
create table junk ( client_id number );
insert into junk values ( 123 );
insert into junk values ( 234 );
commit;
define ClientID = '123';
select *
from junk
where (('&ClientID' IS NOT NULL AND client_id = 234)
or ('&ClientID' IS NULL))
/
CLIENT_ID
----------
234
define ClientID = '';
select *
from junk
where (('&ClientID' IS NOT NULL AND client_id = 234)
or ('&ClientID' IS NULL))
/
CLIENT_ID
----------
123
234
我不太了解Oracle,但假设变量用法正确,逻辑看起来很好。不太<代码>''=NULL在Oracle中,因此它不起作用。。我现在正在写一个解决方案……)您还可以玩
NVL('&ClientID',client\u id)
或其他东西。。但是,您必须小心使用索引。。这很容易混淆优化器;)