Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在PL/SQL过程中声明/分配变量给游标类型_Oracle_Stored Procedures_Plsql - Fatal编程技术网

Oracle 如何在PL/SQL过程中声明/分配变量给游标类型

Oracle 如何在PL/SQL过程中声明/分配变量给游标类型,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我在一个存储过程(在一个包中)中声明了两个游标 两个游标之间的唯一区别是where子句 我想做的是根据上面传递的p_nz_标志打开其中一个游标。即: 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

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

两个游标之间的唯一区别是where子句

我想做的是根据上面传递的p_nz_标志打开其中一个游标。即:

  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_游标时出现编译错误。如果我将我的声明更改为:

  v_load_trx_cursor cursor;
我在声明点得到编译错误,声明“PLS-00201:必须声明标识符‘游标’”

是否可以执行我想执行的操作?在一天结束时,我只想根据传入的p_nz_flag参数迭代相应的游标


谢谢

根据
p\u nz\u标志的值,您似乎只想在代码中使用一个光标
在这种情况下,最好在代码中动态生成where子句,然后使用refcursor返回查询数据

类似于示例7-4中给出的链接

希望能有帮助


Vishad

如果你能按照@Vishad的建议做,即将
p_nz_flag
作为单个游标的参数,我会这样做。否则你可以将查询放入字符串中,并使用
打开游标进行“查询”
语法。
  v_load_trx_cursor cursor;
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;