如何在SQL中使用if...else向WHERE子句添加条件?

问题描述 投票:0回答:1

我有一个存储过程,我想更新它以基于可选参数在 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;
sql oracle stored-procedures
1个回答
0
投票

您可以使用以下逻辑:

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;
© www.soinside.com 2019 - 2024. All rights reserved.