PL SQL For 循环 Sys_RefCursor

2024-01-09

我正在使用 Oracle 12c。在 PL/SQL 中我可以做到这一点

set serveroutput on
declare
begin
  for x in (select 1 as y from dual) loop
    dbms_output.put_line(x.y);
  end loop;
end;

我也可以做这个...

set serveroutput on
declare
  cursor c1 is
    select 1 as y from dual;
begin
  for x in c1 loop
    dbms_output.put_line(x.y);
  end loop;
end;

到目前为止,一切都很好。但是我可以使用 sys_refcursor 来做到这一点吗?我知道我可以使用 fetch/while 循环来完成此操作,但更喜欢 for 循环语法(我认为它更干净)...

set serveroutput on
declare
  cur sys_refcursor;
begin
  cur := Package.GetData(1234);
  fetch cur into y;
  while cur%FOUND loop
    dbms_output.put_line(y);
    fetch cur into y;
  end loop;
end;

我想要做...

set serveroutput on
declare
  cur sys_refcursor;
begin
  cur := PACKAGE.GetData(1234); -- This returns a sys_refcursor
  for x in cur loop
    dbms_output.put_line(x.y);
  end loop;
end;

Error report -
ORA-06550: line 5, column 16:
PLS-00221: 'cur' is not a procedure or is undefined

是否有一种机制可以通过 sys_refcursor 循环(而不是 fetch into/while 循环)?也许 12c 中有一些我不知道的新奇东西......?


SYS_REFCURSOR只是一个预先声明的弱引用游标。没有这样的机制可以循环sys_refcursor无需获取。此外,您不能将弱引用游标与普通游标进行比较,并且它们的工作方式不同。它是分配用于临时保存结果的缓冲区空间。当您运行以下语句时PLSQL block, PLSQL引擎不理解它PLSQL变量并抛出错误

for x in cur 循环

PLS-00221: 'CUR' is not a procedure or is undefined

除此之外,由于您没有定义以下语句,因此也会失败OUT如果包返回一个参数SYS_REFCURSOR.

cur := PACKAGE.GetData(1234);

您可以获取的内容SYS_REFCURSOR然后显示如下:

declare
  a  SYS_REFCURSOR;
  v_emp_id  employee.emp_id%type;
begin         
  --- This is a procedure with OUT parameter as SYS_REFCURSOR
  dynmc_selec(emp_output=>a);

  loop
    FETCH a INTO v_emp_id;
    EXIT WHEN a%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_emp_id );

  end loop;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PL SQL For 循环 Sys_RefCursor 的相关文章

随机推荐

  • 设置定时器问题

    我的双核机器上运行以下代码 当我在同一台 PC 上运行该应用程序的一两个实例时 我的正确计时分辨率为 100 毫秒 然而 当我在同一台 PC 上运行同一应用程序的 3 个实例时 计时分辨率超过 100 毫秒 是否有可能使应用程序的 3 个实
  • Magento XML 用简单的英语构建?

    我一直在阅读有关 Magento 的内容 并且了解其请求周期的核心流程等 基于配置的 MVC 和类重写等 但是 我似乎找不到关于具体细节的好文章 文档 特别是当涉及到为自定义模块等构建 config xml 所需的不同节点时 或者 XML
  • 将不同版本的 python 与 virtualenvwrapper 一起使用

    我使用 Macports 在我的 Mac 上安装了各种版本的 python 当我选择 python 2 7 通过 port select python python27 virtualenvwrapper 工作完美 但是如果我选择另一个版本
  • 使用 boost 创建具有自定义环境的子进程

    文档boost https www boost org doc libs 1 64 0 doc html process html没有提供任何使用自定义环境创建子进程的示例process child 给出了一个例子process syste
  • 如何在单个事务中保存多个 django 模型?

    在我看来 我将数据保存在多个模型中 def myview request do some processing model1 save model2 save 如何确保有回滚model1 save 以防万一model2 save 引发错误
  • 当计时器结束时如何自动继续?

    我想在计时器用完时自动继续 我在这里构建了一个计时器 class Timer var timer NSTimer the callback to be invoked everytime the timer ticks var handle
  • 创造一个只是兑现的空洞承诺? [复制]

    这个问题在这里已经有答案了 我有一个包装器 可以捕获承诺的最后结果 对其进行格式化并输出数据 req resolve promise gt return promise then gt res json req user catch Seq
  • 使用跨几何图形的通用美学和数据框过滤 ggplot2 的几何图形

    假设我有以下数据框 Dummy data frame df lt data frame x rep 1 5 2 y runif 10 z rep c A B each 5 x y z 1 1 0 92024937 A 2 2 0 37246
  • 使用 python 解压主文件夹中的文件夹内的 gz 文件

    我在多个文件夹中有 gz 压缩文件 这些文件都位于名为 usa 的主文件夹中 我能够使用下面的代码提取单个文件 import gzip import shutil source r C usauc300 dbf gz output r C
  • Schedulers.io() 上的并行数据库搜索

    我想知道当我并行访问数据库表时是否应该使用 Schedulers io 还是 Schedulers newThread 例如 如果我使用 Schedulers io 并行地从数千个表中选择记录 则任务完成后会在线程池中创建很多新创建的线程
  • Scala 解释器有哪些限制和解决方法?

    什么样的结构需要 scalac 编译以及如何制作可在解释器中工作的等效结构 Edit 我想使用 scala 而不是 python 作为脚本语言 使用 usr bin scala 您应该能够在 REPL 中执行任何可以在外部代码中执行的操作
  • 将 UIImage 转换为 NSString(反之亦然)

    我需要一种方法来转换 NSString 中的 UIImage 然后将 NSString 转换回 UIImage Thanks 适用于 gt iOS 7 NSString imageToNSString UIImage image NSDat
  • mupdf for android:ndk-build问题(错误:typedef的重新定义......)

    我正在按照必要的步骤安装适用于 Android 的 MuPDF MuPDF 是在我的系统上构建的 我能够使用 C 来利用它 现在尝试使用 Android README 中的所有步骤均已成功执行 但当我执行到步骤 10 时 我就必须这样做nd
  • Rails 错误:`rescue in ':未初始化的常量 Bundler (NameError)

    今天早些时候 我更新了系统上的 gems gem update 它更新了一些 gem 但之后我无法启动我的 Rails 服务器 我收到此错误 Users gugguson rubys my rails app config boot rb
  • NoSuchMethodError Lcom/google/gson/Gson;改造响应后

    因此 我的应用程序发布近一年了 但没有看到此问题 现在它出现了 即使现在 我手机上的调试版本也没有这个问题 我从 Android Studio 打开的任何模拟器都没有任何问题 然而 Google 开发者控制台中的预发布报告中的几乎每个模拟器
  • 了解编译器的工作原理

    我正在学习 C 编程语言 我对编译器如何创建可执行文件有疑问 我的书上说 C 是一种编译语言 因此您需要将源代码翻译为计算机可以执行的文件 这个文件是由编译器生成的 称为目标代码 obj 但是像 hello world 程序这样的程序是由我
  • ostream 链接,输出顺序

    我有一个函数需要ostream引用作为参数 将一些数据写入流 然后返回对同一流的引用 如下所示 include
  • 如何让 Turtle 等待按下的键

    我和我的团队创建了一款在 Turtle 上运行的棋盘游戏 我们很难在不需要 IDE 控制台的情况下运行游戏 我们希望使用 onkeypress 来运行我们的游戏 这样用户就不必离开游戏窗口 import turtle from turtle
  • 普罗米修斯上的多个目标

    我已经在Centos上配置了prometheus 版本详细信息如下 prometheus 2 5 0 linux 386 我在 prometheus yml 配置文件中添加了两个目标 所有服务器节点导出器都在运行 配置如下 scrape c
  • PL SQL For 循环 Sys_RefCursor

    我正在使用 Oracle 12c 在 PL SQL 中我可以做到这一点 set serveroutput on declare begin for x in select 1 as y from dual loop dbms output