sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo manejar los parámetros opcionales en la consulta SQL?

Sí, usando cualquiera de los siguientes:

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);

...no son sargables. Funcionarán, pero realizarán la peor de las opciones disponibles.

Si solo tiene un parámetro, IF/ELSE y declaraciones personalizadas separadas son una mejor alternativa.

La siguiente opción después de eso es SQL dinámico. Pero la codificación de SQL dinámico es inútil si transfiere los predicados no sargable del primer ejemplo. El SQL dinámico le permite personalizar la consulta mientras se adapta a numerosas rutas. Pero también corre el riesgo de inyección SQL, por lo que debe realizarse detrás de consultas parametrizadas (preferiblemente dentro de procedimientos/funciones almacenados en paquetes).