sql >> Databáze >  >> RDS >> Oracle

Zkontrolujte, zda je parametr v klauzuli WHERE NULL

Namísto vyhodnocování stavu parametru vaší procedury v samotném příkazu SQL přesuňte toto vyhodnocení do obsahujícího bloku PL/SQL, aby bylo provedeno pouze jednou před odesláním ideálního příkazu SQL. Například:

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;

Také jsem dosáhl určitého úspěchu při ladění příkazů SQL pomocí OR rozdělením příkazu na dva vzájemně se vylučující příkazy s 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. Jaké jsou 10 nejlepších funkcí Microsoft Access?

  2. Python cx_Oracle SQL s proměnnou řetězce vazby

  3. Chyba MySQL:2013, ztracené připojení k serveru MySQL při „čtení počátečního komunikačního paketu“, systémová chyba:0

  4. Dotaz MySQL pro seskupení dat do různých rozsahů