Oracle
 sql >> база данни >  >> RDS >> Oracle

Проверете дали параметърът е NULL в клаузата WHERE

Вместо да оценявате състоянието на параметъра на вашата процедура в самия SQL израз, преместете тази оценка в съдържащия PL/SQL блок, така че да се изпълни само веднъж, преди да бъде изпратен идеалният SQL израз. Например:

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;

Също така постигнах известен успех в настройката на SQL изрази с OR чрез разделяне на израза на два взаимно изключващи се израза с 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Откриване, изтриване на празни колони и актуализиране на база данни в sql, oracle

  2. Сравнете BLOB изображение с изображения, съхранени като ORDImage, като използвате SQL/MM неподвижно изображение

  3. Инсталацията на Oracle 12c не успя да получи достъп до временното местоположение

  4. Защо регистрирането на грешки в dml се игнорира в паралелен израз

  5. PL/SQL Как да върнете всички атрибути в ROW