如何在PL / SQL过程中向游标类型声明/赋值变量

时间:2014-04-08 01:58:15

标签: oracle stored-procedures plsql

我在存储过程中(在包内)声明了两个游标。

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参数迭代适当的游标。

由于

2 个答案:

答案 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;