【问题标题】:Reference cursor in Oracle Sql DeveloperOracle Sql Developer 中的引用游标
【发布时间】:2025-12-04 05:30:01
【问题描述】:

我需要在 Oracle SQL 开发人员中编写一个引用游标,但我不知道它是如何编写的。我只知道基本查询。

在查看了各种示例后,据我所知,我已经编写了以下光标。我收到一个编译错误“缺少或无效选项”。

谁能帮帮我?

第 1 步:我在 Oracle sql developer 版本 4 中创建了一个新过程。 第2步:我写了以下光标

DECLARE
routeid  VARCHAR2(10);
cursor     c1 IS
SELECT shipment_id FROM SHIPMENT
WHERE shipment_id = 20;

BEGIN
OPEN c1;
 LOOP
   FETCH c1 INTO routeid;
   EXIT WHEN c1%NOTFOUND;
   DBMS_OUTPUT.PUT_LINE(routeid);
 END LOOP;
END;
/

提前感谢您的帮助。

【问题讨论】:

  • 完美无错误执行时出现什么问题?
  • SQL 开发人员出现问题。它已排序。
  • @Sanjay:能告诉我如何计算从游标返回的行数吗?无论如何我可以用 DBMS_OUTPUT 进行行计数吗?如果是,我该怎么做?我想计算查询返回的行数并使用 DBMS_OUTPUT.PUT_LINE 显示它
  • 您不能直接从要在变量上创建的引用游标中计算行数,并通过循环迭代增加行数。
  • @sanjayradadiya:需要一些专家建议:正如您在我的回答中看到的,我将结果放入 c1_rec。现在我的下一个问题是,我希望这个游标有输出参数,并且每一行的值都应该保存在这个输出参数中。因此,例如,c1_rec.p_id 应该移到相应值的 out 参数中……这有意义吗?有没有关于如何做到这一点的示例?

标签: stored-procedures cursor oracle-sqldeveloper


【解决方案1】:

做简单光标的更好方法

CREATE OR REPLACE PROCEDURE Test_cursor (Out_Pid OUT VARCHAR2) AS 
cursor  c1 IS
SELECT shipment_id,p_id FROM test
WHERE shipment_id = 99;

c1_rec c1%rowtype;

BEGIN
 OPEN c1;
  LOOP
  FETCH c1 INTO c1_rec;
  EXIT WHEN c1%NOTFOUND;

  Out_Pid := c1_rec.p_id;
  DBMS_OUTPUT.PUT_LINE('Result from query '||c1_rec.p_id );
  DBMS_OUTPUT.PUT_LINE('Result from out parameter '||Out_Pid );
 END LOOP;

  END Test_cursor;

【讨论】: