sql >> Database teknologi >  >> RDS >> Oracle

Tjek, om parameteren er NULL i WHERE-sætningen

I stedet for at evaluere din procedures parametertilstand i selve SQL-sætningen, skal du flytte denne evaluering til den indeholdende PL/SQL-blok, så den kun udføres én gang, før den ideelle SQL-sætning sendes. For eksempel:

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;

Jeg har også haft en vis succes med at tune SQL-sætninger med en OR ved at opdele erklæringen i to gensidigt udelukkende erklæringer 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. MySQLi klassemønster for tilslutning, luk, lad åben?

  2. Hvilke privilegier kræves for at oprette en bruger i Oracle med en ikke-DBA-bruger?

  3. MYSQL - Hent tidsstempler mellem datoer

  4. Hvordan sikrer man databasekonfigurationsfilen i projektet?