我在存储过程中(在包内)声明了两个游标。
procedure RECONCILE_CC_TRX (p_to_date in date,
p_nz_flag in varchar2,
p_Reconcile_Header_ID out NUMBER
) is
CURSOR LOADED_TRXS_AU IS
SELECT
CC_REC_LOAD_TRX_ID,
CC_REC_LOAD_HEADER_ID,
....
CURSOR LOADED_TRXS_NZ IS
SELECT
CC_REC_LOAD_TRX_ID,
CC_REC_LOAD_HEADER_ID,
两个游标之间的唯一区别是where子句。
我想要做的是,根据上面传递的p_nz_flag打开其中一个游标。即:
IF NVL(p_nz_flag, 'F') = 'F' THEN
v_load_trx_cursor := LOADED_TRXS_AU;
ELSE
v_load_trx_cursor := LOADED_TRXS_NZ;
END IF;
FOR bitem IN v_load_trx_cursor LOOP
...
我最初的想法是声明一个变量并为它分配合适的游标,但是,我无法使用它来编译程序。例如,我尝试过:
v_load_trx_cursor sys_refcursor;
但是在分配“PLS-00382:表达式类型错误”的v_load_trx_cursor时出现编译错误。如果我将声明改为:
v_load_trx_cursor cursor;
我在声明点遇到编译错误,说明必须声明“PLS-00201:Identifier'Golrsor'。
有可能做我想做的事吗?在一天结束时,我只想根据传入的p_nz_flag参数迭代适当的游标。
由于
答案 0 :(得分:0)
根据p_nz_flag
的值,您似乎只想在代码中使用一个游标
在这种情况下,相信最好在代码中动态生成where子句,然后使用refcursor返回查询数据。
此链接上的示例7-4中给出的内容Dynamic Query with Refcursor
希望它有助于
Vishad
答案 1 :(得分:0)
Hi if your whole work for doing this procedure is just to populate the appropriate cursor i think this code may help you.
CREATE OR REPLACE PROCEDURE av_nst_cursor(
flag_in IN VARCHAR2,
av_cur OUT sys_refcursor)
AS
BEGIN
IF flag_in = 'Y' THEN
OPEN av_cur FOR SELECT Query;
ELSE
OPEN av_cur FOR SELECT query;
END IF;
END;