decir que tengo una tabla de ejemplo:¿Cómo manejar los parámetros opcionales en la consulta SQL?
id_pk value
------------
1 a
2 b
3 c
Y tengo un/bloque de muestras de PL SQL, que tiene una consulta que actualmente selecciona una sola fila en una matriz:
declare
type t_table is table of myTable%rowtype;
n_RequiredId myTable.id_pk%type := 1;
t_Output t_table := t_table();
begin
select m.id_pk, m.value
bulk collect into t_Output
from myTable m
where m.id_pk = n_RequiredId;
end;
Lo que necesito hacer es implementar la capacidad de seleccionar una sola fila en una matriz, como se muestra en el bloque anterior, O para seleccionar todas las filas en una matriz, si n_RequiredID
, que es realmente un parámetro de entrada de usuario, se establece en null
.
Y, la pregunta es, ¿cuál es la mejor práctica para manejar esa situación?
puedo pensar en modificar where
cláusula de mi consulta a algo como esto:
where m.id_pk = nvl(n_RequiredId, m.id_pk);
pero supongo que eso va a retrasar la consulta si el parámetro no será nulo, y recuerdo Kyte dijo algo realmente malo acerca de este enfoque.
También se puede pensar en la aplicación de la siguiente lógica PL/SQL:
if n_RequiredId is null then
select m.id_pk, m.value bulk collect into t_Output from myTable m;
else
select m.id_pk, m.value bulk collect
into t_Output
from myTable m
where m.id_pk = n_RequiredId;
end if;
Pero sería demasiado compleja si me encuentro con más de un parámetro de este tipo.
¿Qué me recomendarías?
¡Oh, genial! Esto me salva el día. Sin embargo, la primera no funcionó porque si la columna es nulable, esta cláusula filtrará los valores nulos, mientras que en la pregunta no se filtrarán los valores nulos en el segundo caso. –