sql >> Database >  >> RDS >> Oracle

Controleer of de parameter NULL is binnen de WHERE-clausule

In plaats van de parameterstatus van uw procedure in de SQL-instructie zelf te evalueren, verplaatst u die evaluatie naar het bevattende PL/SQL-blok, zodat deze slechts één keer wordt uitgevoerd voordat de ideale SQL-instructie wordt ingediend. Bijvoorbeeld:

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;

Ik heb ook enig succes gehad bij het afstemmen van SQL-instructies met een OR door de verklaring op te splitsen in twee elkaar uitsluitende verklaringen met een 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. Alleen op datum groeperen in een Datetime-kolom

  2. PHP zegt Geen database geselecteerd, zelfs niet na gebruik van mysqli_select_db()

  3. letterlijke komt niet overeen met de tekenreeksfout bij het bijwerken van de sql-tabel

  4. Best practices voor het ontwerpen van meertalige databases