sql >> Databasteknik >  >> RDS >> Oracle

Kontrollera om parametern är NULL inom WHERE-satsen

Istället för att utvärdera din procedurs parametertillstånd i själva SQL-satsen, flytta den utvärderingen till det innehållande PL/SQL-blocket så att det bara exekveras en gång innan den ideala SQL-satsen skickas. Till exempel:

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;

Jag har också haft viss framgång med att ställa in SQL-satser med en OR genom att dela upp uttalandet i två ömsesidigt uteslutande uttalanden med en UNION ALL:

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. MySQL flera främmande nycklar

  2. Hur skapar man lagrade procedurer i SQL?

  3. Kan inte uppdatera rad i Sqlite i Android men ger inget fel

  4. Hur man importerar MySQL-binlog som innehåller INSERT från ett TIMESTAMP-fält med standardvärdet CURRENT_TIMESTAMP