【发布时间】:2019-07-16 12:33:09
【问题描述】:
用户输入数字(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 循环 那么它不会获取任何记录。
如果用户数据是null,我可以通过设置条件来编写另一个 FOR 循环。但是,会有300行的重复
代码。这将增加维护。
如何调整 FOR 循环,以便如果用户输入数据,则只检索该记录,当用户 不输入数据则检索所有记录?
【问题讨论】:
标签: sql oracle performance plsql in-operator