暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 在 (in子句) 中使用绑定变量进行null条件检查

ASKTOM 2020-12-09
538

问题描述

嗨,汤姆,

我在SQL过程中挣扎着一个简单但棘手的逻辑。

要求:-我想从shell脚本调用SQL,将字符变量作为输入,也可以为null

my sql :- select * from scott.emp where ename in (&1)
&1 possible values :- 1. 'JOHN'
                      2. 'JOHN','ROCKY'
                      3. Null ( NOthing to enter on user input) 


虽然输入值1和2工作正常,但当输入NULL时,它不应检查任何where条件,应显示emp表中的所有记录,即1 = 1

我面临在 “in” 子句中处理null并绕过where子句的问题。

请帮忙 ....

专家解答

要在输入为空时返回行,还需要检查它是否为NULL:

create table t (
  c1 int
);

insert into t values ( 1 );

set define on
define v

old:select * from t
where  c1 in ( &v ) or &v is null
new:select * from t
where  c1 in ( null ) or null is null
C1   
    1 

select * from t
where  c1 in ( &v ) or &v is null;


如果您在应用程序 (不是SQL * Plus/SQLcl脚本) 中对此进行编码,则应使用bind变量。在列表中使用这些变量比较棘手; 有关解决方案,请参见:

https://asktom.oracle.com/pls/apex/asktom.search?tag=how-can-i-do-a-variable-in-list-200005

使用绑定时,您仍然需要IS NULL检查。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论