gpt4 book ai didi

oracle - 在 WHERE IN 子句中使用 CASE

转载 作者:行者123 更新时间:2023-12-02 22:12:42 25 4
gpt4 key购买 nike

我正在尝试根据 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: single-row subquery returns more than one row

错误。

如果您想知道我为什么需要这个,让我快速解释一下。存储过程将接受许多输入参数。其中一些将是用户定义的集合类型。并且所有参数都是可选的,具有 DEFAULT NULL 值。所以我想检查一个参数是否为 NULL,如果是,则将与参数对应的列与自身进行比较(这意味着该列没有过滤器),否则用参数内的值过滤该列。我尝试的方式是否可行?

最佳答案

您的 ELSE 包含返回多行的 SELECT

相反,您可以在测试 IN 之前测试 NULL:

SELECT * FROM TABLE1 WHERE (P1 IS NULL) OR (COL1 IN (SELECT ID FROM TABLE2));

关于oracle - 在 WHERE IN 子句中使用 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14981082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com