Sql 检查where子句中的null条件
在我的Sql 检查where子句中的null条件,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,在我的过程中如果In_CLIENT_ID为null则返回全局_ID为null的行,如果In_CLIENT_ID有一些值,则返回全局_ID=In_CLIENT_ID的行 当我使用GLOBAL\u ID=IN\u CLIENT\u ID时,如果IN\u CLIENT\u ID有一些值,结果是可以的。但是如果IN\u CLIENT\u ID为空,则结果不是 然后我检查IN\u CLIENT\u ID是否为nullout-side查询及其工作。但我不想两次编写相同的查询 CREATE OR REPLAC
过程中
如果In_CLIENT_ID为null
则返回全局_ID
为null的行,如果In_CLIENT_ID
有一些值,则返回全局_ID=In_CLIENT_ID
的行
当我使用GLOBAL\u ID=IN\u CLIENT\u ID
时,如果IN\u CLIENT\u ID有一些值,结果是可以的。但是如果IN\u CLIENT\u ID为空,则结果不是
然后我检查IN\u CLIENT\u ID是否为null
out-side查询及其工作。但我不想两次编写相同的查询
CREATE OR REPLACE PROCEDURE PROCEDURE123(
IN_CLIENT_ID IN VARCHAR2,
EXP_RECORDSET OUT SYS_REFCURSOR
) AS
BEGIN
IF IN_CLIENT_ID IS NULL THEN
OPEN EXP_RECORDSET FOR
SELECT client.id FROM GLOBAL_CLIENT client
WHERE AND client.GLOBAL_ID IS NULL
ORDER BY client.id;
ELSE
OPEN EXP_RECORDSET FOR
SELECT client.id FROM GLOBAL_CLIENT client
WHERE AND client.GLOBAL_ID=IN_CLIENT_ID
ORDER BY client.id;
END IF;
END;
WHERE条款中的条件是否适用 可以通过在where子句中使用AND或连词来实现
OPEN EXP_RECORDSET FOR
SELECT client.id
FROM GLOBAL_CLIENT client
WHERE ( IN_CLIENT_ID IS NULL AND client.GLOBAL_ID IS NULL) OR
( IN_CLIENT_ID IS NOT NULL AND client.GLOBAL_ID=IN_CLIENT_ID)
ORDER BY client.id;
可以通过在where子句中使用AND或连词来实现这一点
OPEN EXP_RECORDSET FOR
SELECT client.id
FROM GLOBAL_CLIENT client
WHERE ( IN_CLIENT_ID IS NULL AND client.GLOBAL_ID IS NULL) OR
( IN_CLIENT_ID IS NOT NULL AND client.GLOBAL_ID=IN_CLIENT_ID)
ORDER BY client.id;
请尝试以下方法
CREATE OR REPLACE PROCEDURE PROCEDURE123(
IN_CLIENT_ID IN VARCHAR2,
EXP_RECORDSET OUT SYS_REFCURSOR
) AS
BEGIN
OPEN EXP_RECORDSET FOR
SELECT client.id
FROM GLOBAL_CLIENT client
WHERE DECODE( client.GLOBAL_ID,
client.IN_CLIENT_ID,
1,
0 ) = 1
ORDER BY client.id;
END;
以上是根据
如果您有任何问题或意见,请随时发表相应的意见。请尝试以下内容
CREATE OR REPLACE PROCEDURE PROCEDURE123(
IN_CLIENT_ID IN VARCHAR2,
EXP_RECORDSET OUT SYS_REFCURSOR
) AS
BEGIN
OPEN EXP_RECORDSET FOR
SELECT client.id
FROM GLOBAL_CLIENT client
WHERE DECODE( client.GLOBAL_ID,
client.IN_CLIENT_ID,
1,
0 ) = 1
ORDER BY client.id;
END;
以上是根据
如果您有任何问题或意见,请随时发表相应的意见。若要澄清,您想返回
客户端.id
,其中两个值均为空或两个值均存在且相等?@toonice yes..回答已更新。若要澄清,是否要返回客户端.id
,其中两个值均为NULL或存在且相等?@toonice yes..答案已更新。在第二个结果中工作的第一个解决方案具有冗余。client.IN_client_ID-->指定错误无效标识。我删除客户端。还有它的作用。。谢谢如果我想忽略IN_CLIENT_ID(如果为null)。比如如果IN_CLIENT_ID为null,那么它会显示所有记录。如果我想忽略IN_CLIENT_ID,如果它为null。比如如果IN_CLIENT_ID为null,那么它将显示所有记录..我很担心。我将从我的答案中删除第二个选项。在第二个结果中工作的第一个解决方案具有冗余。client.IN_client_ID-->指定错误无效标识。我删除客户端。还有它的作用。。谢谢如果我想忽略IN_CLIENT_ID(如果为null)。比如如果IN_CLIENT_ID为null,那么它会显示所有记录。如果我想忽略IN_CLIENT_ID,如果它为null。比如如果IN_CLIENT_ID为null,那么它将显示所有记录..我很担心。我将从我的答案中删除第二个选项。