问题描述
嗨,汤姆,
我在SQL过程中挣扎着一个简单但棘手的逻辑。
要求:-我想从shell脚本调用SQL,将字符变量作为输入,也可以为null
虽然输入值1和2工作正常,但当输入NULL时,它不应检查任何where条件,应显示emp表中的所有记录,即1 = 1
我面临在 “in” 子句中处理null并绕过where子句的问题。
请帮忙 ....
我在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:
如果您在应用程序 (不是SQL * Plus/SQLcl脚本) 中对此进行编码,则应使用bind变量。在列表中使用这些变量比较棘手; 有关解决方案,请参见:
https://asktom.oracle.com/pls/apex/asktom.search?tag=how-can-i-do-a-variable-in-list-200005
使用绑定时,您仍然需要IS 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




