Допустим, у меня есть образец таблицы:
id_pk value
------------
1 a
2 b
3 c
И у меня есть образец блока PL / SQL, в котором есть запрос, который в настоящий момент выбирает одну строку в массив:
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;
Мне нужно реализовать возможность для выбора одной строки в массиве, как показано в блоке выше, ИЛИ для выбора всех строк в массив, если n_RequiredID
, который на самом деле является параметром ввода пользователя, установить на ноль
.
И вопрос в том, как лучше всего справиться с такой ситуацией?
Я могу придумать, как изменить предложение where
моего запроса на что-то вроде этого:
where m.id_pk = nvl(n_RequiredId, m.id_pk);
но я полагаю, что это будет чтобы замедлить запрос, если параметр не будет нулевым, и я помню, что Кайт сказал что-то очень плохое об этом подходе.
Я также могу подумать о реализации следующей логики 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;
Но это станет слишком сложным, если я столкнусь с более чем одним параметром такого типа.
Что вы мне посоветуете?