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