我有一个存储过程,我想更新它以基于可选参数在 WHERE 子句中包含另一个条件。现在我正在检查 my_id,但我想添加对 store_id 的检查,但前提是它传递给存储过程(这就是为什么我想检查它是否不为空)。
这就是我想要的:
CREATE OR REPLACE PROCEDURE MY_STORED_PROCEDURE (my_id IN VARCHAR2, store_id IN NUMBER DEFAULT null) AS
BEGIN
SELECT *
FROM MYTABLE
WHERE my_id = @my_id
//I want to add "AND" clause only if store_id is NOT NULL....something like:
//IF store_id IS NOT NULL
// AND store_id = @store_id
END;
我尝试过谷歌搜索并环顾四周,但未能找到方法。我尝试了这个,但它在 SQL 中显示错误:
CREATE OR REPLACE EDITIONABLE PROCEDURE MY_STORED_PROCEDURE (my_id IN VARCHAR2, store_id IN NUMBER DEFAULT null) AS
BEGIN
SELECT *
FROM MYTABLE
WHERE my_id = @my_id
IF store_id IS NOT NULL
AND store_id = @store_id
END;
您可以使用以下逻辑:
CREATE OR REPLACE EDITIONABLE PROCEDURE MY_STORED_PROCEDURE (my_id IN VARCHAR2, store_id IN NUMBER DEFAULT null) AS
BEGIN
SELECT *
FROM MYTABLE
WHERE
my_id = @my_id AND
(store_id IS NULL OR store_id = @store_id)
END;