我可以将显式游标传递给函数/过程以在 FOR 循环中使用吗?

2023-11-23

我有一个过程对游标返回的所有记录执行一些计算。它看起来有点像这样:

PROCEDURE do_calc(id table.id_column%TYPE)
IS
  CURSOR c IS
    SELECT col1, col2, col3
      FROM table
     WHERE ...;
BEGIN
  FOR r IN c LOOP
    -- do some complicated calculations using r.col1, r.col2, r.col3 etc.
  END LOOP;
END;

现在,我需要对来自不同表的不同记录集执行完全相同的计算。然而,它们具有与上面示例中相同的“形状”。

是否可以编写一个如下所示的过程:

PROCEDURE do_calc2(c some_cursor_type)
IS
BEGIN
  FOR r IN c LOOP
    -- do the calc, knowing we have r.col1, r.col2, r.col3, etc.
  END LOOP;
END;

我知道关于SYS_REFCURSOR,但我想知道是否可以使用更方便的FOR ... LOOP语法和隐式记录类型。


创建一个包。

将光标声明为包变量。

Use %rowtype设置函数参数类型。

create or replace package test is
  cursor c is select 1 as one, 2 as two from dual;

  procedure test1;
  function test2(test_record c%ROWTYPE) return number;

end test;


create or replace package body test is
  procedure test1 is    
  begin
    for r in c loop      
      dbms_output.put_line(test2(r));
    end loop;
  end;

  function test2(test_record c%ROWTYPE) return number is
    l_summ number;
  begin
    l_summ := test_record.one + test_record.two;
    return l_summ;
  end;
end test;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将显式游标传递给函数/过程以在 FOR 循环中使用吗? 的相关文章

随机推荐

  • Google 自定义搜索下一页

    我有以下代码 但我不知道如何打印下一页的链接 如何转到下一页 usr bin python2 4 coding utf 8 import pprint from apiclient discovery import build def ma
  • 如何将 BlueZ 配置为要求连接设备输入匹配的密钥?

    我正在尝试在嵌入式 Linux 设备上设置蓝牙 以便使用 SSP 模式 我的设备生成密码并在其显示屏上显示密码 并且要求远程端 例如用户的手机 输入匹配的密码才能使用才能成功配对 我编写 注册了一个代理 将其模式设置为 DisplayOnl
  • 为什么数组的 VarType() 总是返回 8204

    In the VarType MSDNMicrosoft VBScript 文档VarType它说的功能 粗体强调 备注 VarType 函数永远不会通过以下方式返回 Array 的值 本身 它总是添加到其他一些值来指示数组 特定类型 Va
  • 增量逻辑

    我试图更深入地了解后增量和预增量 但我有点坚持以下表达式 public static void main String args int i 0 i i i i 2 i i i 0 i i 2 i i i 0 1 3 2 1 i 0 6 1
  • 如何根据实时音频开发频谱分析仪?

    我正在开发一个应用程序 可以实时从麦克风获取源音频 无需文件存储 基本上 我使用 mRecorder new MediaRecorder mRecorder setAudioSource MediaRecorder AudioSource
  • 带有 SceneKit SCNProgram 的金属着色器

    我正在寻找一个可以在 SceneKit 和 SCNProgram 中工作的金属着色器 有人可以告诉我正确的方法声明 如何连接它吗 let program SCNProgram program vertexFunctionName myVer
  • 在 Android 上阻止网站

    有没有办法在 Android 设备上以编程方式阻止网站 我想要一个填充到持续运行的服务中的 URL 黑名单 当在受限条款下运行的用户打开浏览器时 它应该检查该黑名单 我想过修改hosts allow和hosts deny文件 但这些文件受到
  • 如何在 Node.js 上使用 Sequelize 进行连接查询

    我正在使用sequelize ORM 一切都很棒而且干净 但是当我使用它时遇到了问题join查询 我有两个模型 用户和帖子 var User db seq define User username type db Sequelize STR
  • 为什么不允许 auto 作为函数参数?

    From 这个问题 很清楚auto不能用作函数参数 我的问题是为什么返回类型被允许为auto但函数参数不是 auto function auto data DOES something Since there有很多好处auto进来c 1z
  • 使用 Next js 时在 CSS/SASS 模块中使用 kebab-case CSS 类名

    我在 React Next js 中使用 SCSS 模块作为我的组件 但我不知道如何导入 kebab case 类 目前 我只是用驼峰命名法编写所有 SCSS 类 但这并不理想 因为这意味着我无法使用 SCSS 级联 我还在学习 React
  • 超过 Google Directions API 上每个请求 23 个航点的限制(商务/工作级别)

    我想使用 Google Directions API 为一家处理冬季扫雪机和夏季景观美化的公司开发路线规划软件 客户的要求之一是他能够计算具有至少 30 个 最好更多 航点的路线 根据文档 下面引用 即使 Google Maps API f
  • DB2:从表中清除大量记录

    我使用 DB2 9 7 FP5 作为 LUW 我有一个包含 250 万行的表 我想删除大约 100 万行 并且此删除操作分布在整个表中 我正在用 5 个删除语句删除数据 delete from tablename where tableky
  • Figure.show、Figure.canvas.draw 和Figure.canvas.draw_idle 之间有什么区别

    在 Matplotlib 中 我可以通过调用来更新图中绘图的视觉效果Figure对象 说fig并调用该方法show fig show 但我也可以通过致电来做到这一点canvas图中的对象 然后调用方法draw fig canvas draw
  • iOS 如何实现下拉列表以及如何关闭它?

    我需要一些关于如何在 iOS 中实现下拉列表类型功能的输入 我想到了一些解决方案 例如使用UITableView用于显示文本项列表 在我的例子中 列表可以是静态的也可以是动态的 所以UITableView对于我的情况来说似乎是一个不错的选择
  • 在 C++ 中重载比较运算符会导致“无效运算符<”

    目前正在尝试在 C 中对对象向量进行排序 每个对象都包含一个字符串 字符串可以包含字母或数字 由于设计限制 这是必要的 因为比较器可以更改 目前 该对象的类已重载 因此当比较两个对象时 将比较它们包含的字符串 这在一定程度上是有效的 但是
  • 使用 using 指令进行不明确的名称查找

    不允许将名称空间和同名的类放入一个声明区域 即 namespace A class A 格式不正确 参见第 3 3 1 4 节 但是 可以通过 using 指令引入任一名称 namespace N namespace A int i str
  • Flutter:应用程序在后台时使用路径提供程序

    我目前正在尝试将 FCM 和本地通知实现到我的 Flutter 应用程序中 我已成功配置 FCM 和普通通知的本地通知 但我还有一种不同类型的通知 我想用图像显示 当我的应用程序位于前台时 通知显示没有错误 但是当我终止时应用程序 将其移动
  • 使用 AFNetworking 2.0 加载图像

    我正在尝试使用 AFNetworking 2 0 将照片添加到 POST 这个 iOS 应用程序将帖子和照片发送到博客 我无法弄清楚为什么图像无法加载 这是我到目前为止得到的 publish text and image void publ
  • 强制Linux只使用4G以上的内存?

    我有一个 Linux 设备驱动程序 它连接到一个理论上可以使用 64 位地址执行 DMA 的设备 我想测试一下这是否真的有效 有没有一种简单的方法可以强制 Linux 机器不使用物理地址 4G 以下的任何内存 如果内核映像内存不足也没关系
  • 我可以将显式游标传递给函数/过程以在 FOR 循环中使用吗?

    我有一个过程对游标返回的所有记录执行一些计算 它看起来有点像这样 PROCEDURE do calc id table id column TYPE IS CURSOR c IS SELECT col1 col2 col3 FROM tab