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

Как да боравим с незадължителни параметри в SQL заявка?

Да, като използвате някое от следните:

WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);

...не подлежат на саргиране. Те ще работят, но изпълняват най-лошата от наличните опции.

Ако имате само един параметър, IF/ELSE и отделните, персонализирани изрази са по-добра алтернатива.

Следващата опция след това е динамичен SQL. Но кодирането на динамичен SQL е безполезно, ако пренесете предикатите, които не могат да се саргират в първия пример. Динамичният SQL ви позволява да персонализирате заявката, като същевременно поемате множество пътища. Но също така рискува SQL инжектиране, така че трябва да се изпълнява зад параметризирани заявки (за предпочитане в рамките на съхранени процедури/функции в пакети.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите ASCII стойност в Oracle?

  2. Как да премахнете неработното време в Oracle

  3. Тип данни на Oracle:Трябва ли да използвам VARCHAR2 или CHAR

  4. Oracle:има ли значение редът на колоните в индекс?

  5. Как да върнете списък с валидни часови зони в базата данни на Oracle