Sql 甲骨文条件何处

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

您好,我正在尝试添加条件where,因此当参数ClientId不是“”时,应该在where中使用它的值,但如果ClientId为=“”,则不应该应用where

我试过这个,但这一直给我空的结果

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)
或其他东西。。但是,您必须小心使用索引。。这很容易混淆优化器;)