我试图根据IN参数来制定WHERE子句。出于这个原因,我正在做一些关于在WHERE IN子句中使用CASE的实验。这是什么工作正常:在WHERE IN中使用CASE条款
SELECT * FROM TABLE1 WHERE COL1 IN (SELECT ID FROM TABLE2);
考虑我有一个名为P1的输入参数。该类型不是必需的。如果P1的值为null,则以下一个也能正常工作:
SELECT * FROM TABLE1 WHERE COL1 IN (CASE P1 WHEN NULL THEN COL1 ELSE (SELECT ID FROM TABLE2));
但如果P1不为NULL,我得到
ORA-01427:单行子查询返回不止一行
错误。
如果你想知道为什么我需要这个,让我快速解释它。存储过程将接受许多输入参数。其中一些将是用户定义的集合类型。并且所有参数都是可选DEFAULT NULL值。所以我想检查一个参数是否为NULL,如果是这种情况,那么比较与该参数相对应的列对其本身(这意味着该列没有过滤器),否则使用参数内的值(s)过滤列。我试图以某种方式尝试吗?
太棒了。非常感谢。 – 2013-02-20 14:01:31