Пользователь вводит числа (1,2,3 и т.д.). Мое требование состоит в том, что если номер ввода пользователя присутствует в таблице базы данных, то должны быть получены только эти записи. Если пользователь НЕ ввел данные, то должны быть извлечены ВСЕ записи из таблицы.
Вводимые пользователем числа хранятся в table type
, а соответствующий код приведен ниже.
CREATE OR REPLACE TYPE ACCNT_NUMBER_TYPE AS TABLE OF NUMBER;
//ACCNT_NUMBER_TYPE будет иметь значения 1,2,3 и т. д.
Ниже моя процедура.
CREATE OR REPLACE PACKAGE BODY pr_retrieve_data as
PROCEDURE FETCH_MYTABLE_DETAILS() is
FOR indx in (select column1,
column2
from SOMEOTHERTABLE SOT
WHERE SOT.ACCNT_NUMBER IN (SELECT * FROM TABLE(L_ACCNT_NUMBER)))
LOOP
...
-- Around 300 lines of code goes here
END LOOP;
end FETCH_MYTABLE_DETAILS;
end pr_retrieve_data;
Проблема, с которой я столкнулся, заключается в том, что я не могу написать логику для случая, когда у пользователя нет входных данных. В этом случае я должен получить все записи. Но согласно приведенному выше циклу FOR, если у пользователя нет входных данных, он НЕ будет извлекать какие-либо записи.
Я мог бы написать еще один цикл FOR, поставив условие, если данные пользователя равны null
. Но будет повторение 300 строк кода. Это увеличит техническое обслуживание.
Как настроить цикл FOR таким образом, чтобы, если пользователь вводит данные, извлекалась только эта запись, а когда пользователь не ввел данные, извлекались ВСЕ записи?