sql >> データベース >  >> RDS >> Oracle

WHERE句内でパラメータがNULLかどうかを確認します

    SQL文自体でプロシージャのパラメータ状態を評価する代わりに、その評価を含まれているPL / SQLブロックに移動して、理想的なSQL文が送信される前に1回だけ実行されるようにします。例:

    CREATE OR REPLACE PROCEDURE my_sp (p_DrumNo VARCHAR2)
    IS
    BEGIN
        IF p_DrumNo IS NULL THEN
            SELECT ...
            INTO ... -- Assumed
            FROM ...
            WHERE my_column = p_DrumNo;
        ELSE
            SELECT ...
            INTO ... -- Assumed
            FROM ...
            WHERE ORDER_ID IN (SELECT ORDER_ID FROM ORDERDELIVERY);
        END;
    END;
    

    ORを使用してSQLステートメントを調整することにもある程度成功しました。 UNION ALLを使用して、ステートメントを2つの相互に排他的なステートメントに分割します。

    SELECT ...
    FROM ...
    WHERE p_DrumNo IS NULL
    AND ORDER_ID IN (SELECT ORDER_ID FROM ORDERDELIVERY)
    UNION ALL
    SELECT ...
    FROM ...
    WHERE p_DrumNo IS NOT NULL
    AND my_column = p_DrumNo;
    


    1. SQLでのDeltaE(CIE Lab)の計算と並べ替えのパフォーマンス

    2. 複数の値にまたがる開始タイムスタンプと終了タイムスタンプを持つ部分的/完全に重複するイベントを削除する

    3. レコードがストアドプロシージャを介してターゲットテーブルに転送された後、ソーステーブルからレコードを削除します

    4. SQL:グループごとの最大レコードを検索します