Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL:不考虑WHERE子句参数为空_Sql_Database_Oracle - Fatal编程技术网

Oracle SQL:不考虑WHERE子句参数为空

Oracle SQL:不考虑WHERE子句参数为空,sql,database,oracle,Sql,Database,Oracle,我正在寻找它,但找不到任何丙酸盐溶液 SELECT a, b, c FROM table WHERE d := parameter1 AND e := parameter2; 因此,如果给定了d和e,那么结果查询是有效的。 D参数总是有选择的,但是E是可选的,所以如果没有E的输入,我不想考虑和e:=参数2< /Cord>语句,只得到D参数的所有行。p> SELECT a, b, c FROM table WHERE d := parameter1 AND (e is not null and

我正在寻找它,但找不到任何丙酸盐溶液

SELECT a, b, c FROM table WHERE d := parameter1 AND e := parameter2;
因此,如果给定了d和e,那么结果查询是有效的。 D参数总是有选择的,但是E是可选的,所以如果没有E的输入,我不想考虑<代码>和e:=参数2< /Cord>语句,只得到D参数的所有行。p>
SELECT a, b, c FROM table WHERE d := parameter1 AND (e is not null and e := parameter2 or e is null);
请注意
=
而不是
:=

请注意
=
而不是
:=

试试这个

SELECT a, b, c FROM table WHERE d := parameter1 AND case when e is null then parameter2 else e end := parameter2;
试试这个

SELECT a, b, c FROM table WHERE d := parameter1 AND case when e is null then parameter2 else e end := parameter2;

其他答案通常是正确的,但实际上,使用两个不同的查询并在调用代码中选择其中一个可能会更好。虽然查询计划比以前更智能,但可以根据第一次调用中使用的参数“锁定”。如果这些都是非典型的,你可能得到的计划,通常不是最好的。这种行为在DB引擎之间会有所不同(我认为Oracle非常好)

既然您在调用时已经知道自己是否有值,只需执行一位SQL或另一位SQL即可


如果您有很多值,那么这可能会失控,但您也会有更大的风险错过最佳执行计划。

其他答案通常是正确的,但实际上,您最好使用两个不同的查询并在调用代码中选择一个。虽然查询计划比以前更智能,但可以根据第一次调用中使用的参数“锁定”。如果这些都是非典型的,你可能得到的计划,通常不是最好的。这种行为在DB引擎之间会有所不同(我认为Oracle非常好)

既然您在调用时已经知道自己是否有值,只需执行一位SQL或另一位SQL即可


如果您有很多值,那么这可能会失控,但是您也会有错过最佳执行计划的更大风险。

(d:=parameter1或parameter1为null)和(…)
e
是否在表中定义为
非null
?如果是,您可以使用
和e=nvl(参数2,e)
(d:=parameter1或parameter1为空)和(…)
e
在表中定义为
非空
?如果是,您可以使用
和e=nvl(参数2,e)
。什么不起作用?你能提供样本数据和预期的结果吗?这将不起作用,因为它会考虑当E的值是空的,但是他根本不想考虑E条件。什么不起作用?你能提供样本数据和预期的结果吗?这将不起作用,因为它会考虑当E的值是空的,但是他根本不想考虑E条件。