SQL 条件不工作的情况
SQL case in where condition not working
我正在尝试根据非空条件编写动态 SQL 语句。基本上我有一个存储过程,它有 2 个输入参数,即 ip1 和 ip2。 ip1 将始终具有值,但 ip2 可能具有也可能不具有 i/p 参数的值。所以我正在尝试使用如下案例编写查询。我基本上只是在 ip2 id 不为 null 作为 i/p 参数时才尝试在 where 子句中添加 ip2 条件。如果 ip2 为 null,则只需添加 ip1 条件。但是这个查询抛出一个错误。你能告诉我哪里出错了吗?
SELECT decode(COUNT(1),0,'N','Y')
INTO v_count
FROM table C
WHERE C.column1 = ip1
AND (CASE
WHEN ip2 IS NOT NULL
THEN c.column2 = ip2
END);
SELECT decode(COUNT(1),0,'N','Y')
INTO v_count
FROM table C
WHERE C.column1 = ip1
AND (ip2 IS NULL OR c.column2 = ip2);
这也有效:
SELECT decode(COUNT(1),0,'N','Y')
INTO v_count
FROM table C
WHERE C.column1 = @ip1
AND C.column2 = isnull(@ip2, C.column2)
...请注意,如果 colmn2 可以包含 NULL 值,这将不起作用。
我正在尝试根据非空条件编写动态 SQL 语句。基本上我有一个存储过程,它有 2 个输入参数,即 ip1 和 ip2。 ip1 将始终具有值,但 ip2 可能具有也可能不具有 i/p 参数的值。所以我正在尝试使用如下案例编写查询。我基本上只是在 ip2 id 不为 null 作为 i/p 参数时才尝试在 where 子句中添加 ip2 条件。如果 ip2 为 null,则只需添加 ip1 条件。但是这个查询抛出一个错误。你能告诉我哪里出错了吗?
SELECT decode(COUNT(1),0,'N','Y')
INTO v_count
FROM table C
WHERE C.column1 = ip1
AND (CASE
WHEN ip2 IS NOT NULL
THEN c.column2 = ip2
END);
SELECT decode(COUNT(1),0,'N','Y')
INTO v_count
FROM table C
WHERE C.column1 = ip1
AND (ip2 IS NULL OR c.column2 = ip2);
这也有效:
SELECT decode(COUNT(1),0,'N','Y')
INTO v_count
FROM table C
WHERE C.column1 = @ip1
AND C.column2 = isnull(@ip2, C.column2)
...请注意,如果 colmn2 可以包含 NULL 值,这将不起作用。