Oracle-如果绑定变量可以为空,那么可以将其放入In()子句中吗

Oracle-如果绑定变量可以为空,那么可以将其放入In()子句中吗,oracle,where-clause,Oracle,Where Clause,在Oracle中,如果bind变量可以为空,是否可以将其放入In()子句中?询问,因为在SQL中,如果Oracle在()中看到,而其中没有任何数据,则会显示错误 ORA-00936: missing expression. 编辑:未能提及不能使用PL/SQL Edit2:也没有提到变量的格式是1,2,3或空字符串。空字符串不能替换为NULL。您可以这样做,它在语法上是正确的。 我希望你知道NULL不等于任何东西,即使是NULL(所以NULL = NULL不是真的,但是NULL),它会导致查询中

Oracle
中,如果bind变量可以为空,是否可以将其放入
In()
子句中?询问,因为在SQL中,如果Oracle在()中看到
,而其中没有任何数据,则会显示错误

ORA-00936: missing expression.
编辑:未能提及不能使用PL/SQL


Edit2:也没有提到变量的格式是1,2,3或空字符串。空字符串不能替换为NULL。

您可以这样做,它在语法上是正确的。 我希望你知道NULL不等于任何东西,即使是NULL(所以NULL = NULL不是真的,但是NULL),它会导致查询中的意想不到的结果,所以如果不影响性能

< P>,请考虑使用NVL函数:

declare

   l_statement varchar2(32767);

begin
   l_statement := 'select * from user_tables where table_name in (:a)';

   execute immediate l_statement
      using '';

end;

它不会在(null)中看到
?我认为这是不可能的。无论如何,谢谢。例如,var只能是1,2,3,或者从表中选择nothing(非null),其中的代码(nvl(,null))将导致errorDefine“nothing”-为什么不是
null
?空字符串(
'
)和
null
在Oracle中是相同的。如果查询中有一个绑定变量,那么它不会消失。也许你应该展示你的代码,这样我们就可以看到你真正的意思,以及到目前为止你遇到的任何错误。有一个PHP代码,它用1,2,3或不带引号的空字符串(既不是null,也不是带引号的空字符串“”)替换变量。我想这是不可能的。无论如何,谢谢你的努力,也很抱歉解释得不够好。这不是一个空列表,而是一个包含空字符串的列表。空字符串和null在Oracle中是一样的