Пользовательские номера ввода (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 строк кода.Это увеличит maintenace.
Как я могу настроить цикл FOR таким образом, чтобы, если пользователь вводит данные, то извлекалась только эта запись, а когда пользователь не вводил данные, тогда извлекались бы ВСЕ записи?