当前位置: 首页 > 知识库问答 >
问题:

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

房项禹
2023-03-14

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

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_标志打开其中一个游标。即:

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

  v_load_trx_cursor cursor;

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

有可能做我想做的事情吗?归根结底,我只想根据传入的p_nz_flag参数迭代适当的光标。

谢啦

共有2个答案

穆景辉
2023-03-14
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;
盖高畅
2023-03-14

看起来您只想在代码中使用一个游标,基于p\u nz\u flag的值。在这种情况下,最好在代码中动态生成where子句,然后使用refcursor返回查询数据。

类似于示例7-4中给出的使用Refcursor的动态查询链接

希望有帮助

维沙德

 类似资料:
  • 问题内容: 我试图在 SQL Server* 2005中创建一个 VIEW 。 * SQL代码按这种方式工作(在VS2008中使用I麓m),但是在SQL Server中无法保存它,因为弹出错误消息“声明标量变量@StartDate”和“声明标量变量@EndDate”向上。 这是代码: 而 我的问题当然是-我应该究竟如何申报呢? 我尝试将以下代码放在第一位: 但是,这并没有达到预期的效果,正如我所期

  • 并在查询中更改此变量的值?

  • 修改过程后,仍然返回错误#1324-未定义的游标:getid。我如何解决这个问题?

  • 主要内容:隐式游标,显式游标在本章中,我们将讨论和学习中的游标。 Oracle创建一个称为上下文区域的内存区域,用于处理SQL语句,它包含处理该语句所需的所有信息; 例如,处理的行数等。 游标是指向此上下文区域的指针。通过游标控制上下文区域,游标保存SQL语句返回的行(一个或多个)。 游标所在的行集称为活动集。 可以命名一个游标,以便在程序中引用它来获取和处理SQL语句返回的行,一次处理一个(行)。PL/SQL中有两种类型的

  • 问题内容: 如何在mysql中声明变量,以便第二个查询可以使用它? 我想写一些像: 问题答案: MySQL中主要有三种类型的变量: 用户定义的变量 (以开头): 您可以访问任何用户定义的变量,而无需对其进行声明或初始化。如果引用的变量尚未初始化,则其值为和字符串类型。 您可以使用或语句来初始化变量: 要么 可以从一组有限的数据类型中为用户变量分配一个值:整数,十进制,浮点数,二进制或非二进制字符串

  • 问题内容: 我有一个Netezza查询,在其中我引用了一系列案例陈述中的几个日期。而不是每次我都想在开始时将一个变量置为一个变量并在整个查询中都使用它时,而不是替换所有这些日期。在SAS中,我会这样做: 问题答案: 不幸的是,Netezza中没有程序SQL扩展,您无法将这样的变量用作SQL语言本身的一部分。纯粹的SQL解决方案将涉及一些麻烦,例如加入CTE并返回该值。但是,NZSQL CLI确实允