Reputation: 4917
In my PROCEDURE
if IN_CLIENT_ID is null
then its return the row where GLOBAL_ID
is null and if IN_CLIENT_ID
have some value then its return the row that GLOBAL_ID=IN_CLIENT_ID
.
When i use GLOBAL_ID=IN_CLIENT_ID
result is ok if IN_CLIENT_ID have some value.But not for if IN_CLIENT_ID
is null.
Then i check IN_CLIENT_ID is null
out side of query and its working. But i don't want to write same query two times.
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;
Is there any way apply if condition in WHERE clause.
Upvotes: 0
Views: 238
Reputation: 2246
Please try the following...
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;
The above is as per https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:4410543900346652511.
If you have any questions or comments, then please feel free to post a Comment accordingly.
Upvotes: 2
Reputation: 12309
You can do this by USING AND OR conjunctions in where clause
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;
Upvotes: 1