创建一个返回表的 Oracle 函数

2023-12-08

我正在尝试在包中创建一个返回表的函数。我希望在包中调用该函数一次,但能够多次重复使用其数据。虽然我知道我在 Oracle 中创建了临时表,但我希望保持干燥。

到目前为止,这就是我所拥有的:

Header:

CREATE OR REPLACE PACKAGE TEST AS 

    TYPE MEASURE_RECORD IS RECORD (
      L4_ID VARCHAR2(50),
      L6_ID VARCHAR2(50),
      L8_ID VARCHAR2(50),
      YEAR NUMBER,
      PERIOD NUMBER,
      VALUE NUMBER
    );

    TYPE MEASURE_TABLE IS TABLE OF MEASURE_RECORD;

    FUNCTION GET_UPS(
      TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',
      STARTING_DATE_IN DATE,
      ENDING_DATE_IN DATE  
    ) RETURN MEASURE_TABLE;

END TEST;

Body:

CREATE OR REPLACE PACKAGE BODY TEST AS 

  FUNCTION GET_UPS (
    TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',
    STARTING_DATE_IN DATE,
    ENDING_DATE_IN DATE
  ) RETURN MEASURE_TABLE IS

    T MEASURE_TABLE;

  BEGIN

        SELECT  ...
        INTO    T
        FROM    ...

      ;

  RETURN T;

  END GET_UPS;

END TEST;

标头可以编译,而主体则不能。一条错误消息是“值不足”,这可能意味着我应该选择 MEASURE_RECORD,而不是 MEASURE_TABLE。

我缺少什么?


我想你想要一个流水线表函数.

像这样的东西:

CREATE OR REPLACE PACKAGE test AS

    TYPE measure_record IS RECORD(
       l4_id VARCHAR2(50), 
       l6_id VARCHAR2(50), 
       l8_id VARCHAR2(50), 
       year NUMBER, 
       period NUMBER,
       VALUE NUMBER);

    TYPE measure_table IS TABLE OF measure_record;

    FUNCTION get_ups(foo NUMBER)
        RETURN measure_table
        PIPELINED;
END;

CREATE OR REPLACE PACKAGE BODY test AS

    FUNCTION get_ups(foo number)
        RETURN measure_table
        PIPELINED IS

        rec            measure_record;

    BEGIN
        SELECT 'foo', 'bar', 'baz', 2010, 5, 13
          INTO rec
          FROM DUAL;

        -- you would usually have a cursor and a loop here   
        PIPE ROW (rec);

        RETURN;
    END get_ups;
END;

为了简单起见,我删除了你的参数,并且没有在函数中实现循环,但你可以看到原理。

Usage:

SELECT *
  FROM table(test.get_ups(0));



L4_ID L6_ID L8_ID       YEAR     PERIOD      VALUE
----- ----- ----- ---------- ---------- ----------
foo   bar   baz         2010          5         13
1 row selected.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建一个返回表的 Oracle 函数 的相关文章

随机推荐

  • 无法下载 Spring 框架 jar 文件

    从过去的半个小时开始 我尝试下载 spring 框架库 但仍然无法下载 我正在关注这个本教程 点击这里 正如他们所说 我找不到任何罐子 作者所代表的 看起来 Spring 站点已更新 我很困扰 请帮助我如何下载视频中所示的罐子从春天的网站
  • Camel cxfrs RESTful 客户端 / ProducerTemplate ConnectionTimeout

    我正在尝试为 Camel CXF RS 组件设置 connectionTimeout here 它在第 3 方服务上生成 RESTful 请求 默认30000毫秒太长了 Exchange exchange template send cxf
  • PowerShell 脚本 - 进程的命令行未显示

    我一直在尝试创建一个 PowerShell 脚本 该脚本应列出 svchost exe 进程的所有正在运行的实例及其 PID 命令行 CPU 和 RAM 使用情况 但是 我在显示命令行参数时遇到问题 对于所有列出的进程 该行都是空白的 请问
  • 如何使用pyqt4创建圆形图像?

    我在这里写了这段代码但没有工作 import sys from PyQt4 import QtGui QtCore class CricleImage QtCore QObject def init self super CricleIma
  • 如何为 request.getRequestDispatcher() 指定 .JSP 文件的路径?

    我对 request getContextPath 的含义感到困惑 我的文件布局如下 MyServer WebContent Resources MyImage jpg Resources Scripts MyScript js WEB I
  • 如何从类型脚本读取缓冲区数据?(Solana)

    如何从类型脚本读取缓冲区数据 我想使用公钥来获取我拥有的所有令牌列表 我试图得到这个 但返回的是一个空的对象数组 import Connection Keypair from solana web3 js const Solana new
  • 读取 C 中的分数

    如何将分数读入 C 中以进行数学运算 分数将包含斜杠符号 例如 用户将输入3 12 一个字符串 程序将找到 gcd 计算约简分数并得出 1 4 我最初的计划是使用 strtok 函数本身获取分子和分母 但我遇到了将分子和分母存储到单独变量中
  • Ruby 私有 attr_accessor 和意外的 nil

    当我经常使用 Ruby 时 我有一个坏习惯 将所有内容公开而忽略隐私 不幸的是 这种无知又回来困扰着我 这是我的问题的一个简单版本 class Something private attr accessor sneaky public de
  • SharePoint - 发生意外错误

    在 SharePoint 中 当我转到新的 Web 部件页面时 我收到以下信息 Error 发生意外的错误 Web 部件维护页面 如果您有权限 可以使用此页面暂时关闭 Web 部件或删除个人设置 有关详细信息 请联系您的站点管理员 解决 W
  • 是否有一个 Java XML API 可以解析文档而不解析字符实体?

    我有一个程序需要解析包含字符实体的 XML 程序本身不需要解决它们 并且它们的列表很大并且会发生变化 所以如果可以的话 我想避免对这些实体的显式支持 这是一个简单的例子
  • 在 INSERT 语句中使用 ROWLOCK (SQL Server)

    在复制大量数据并将其插入同一个表的插入语句上使用 ROWLOCK 是否明智 Ex INSERT INTO TABLE with rowlock id name SELECT newid name FROM TABLE with nolock
  • C++ 排序和跟踪索引

    使用 C 并希望使用标准库 我想按升序对样本序列进行排序 但我也想记住新样本的原始索引 例如 我有一组样本 向量或矩阵A 5 2 1 4 3 我想将这些排序为B 1 2 3 4 5 但我还想记住这些值的原始索引 这样我就可以获得另一组 C
  • Windows 版本的 wcswidth_l

    我有一些文本要写入 Windows 控制台 我需要知道列的实际宽度 wcswidth l 似乎是拥有它的平台上的最佳选择 尽管mbswidth l 会更好 因为我不想使用 wchar t 但由于某种原因它不存在 但除了其他平台之外 我还需要
  • Reflection Help - 根据另一个对象设置对象的属性

    我需要一些反思的帮助 我将一个对象传递给另一个对象的构造函数 我需要循环遍历参数的属性并基于它设置新对象属性 大多数 但不是全部 params 属性都存在于新对象中 到目前为止 我已经有了基本的框架 public DisabilityPay
  • Git远程服务器Push失败

    从远程服务器克隆 Git 存储库后 我在本地副本上提交了一些更改 我想将这些更改推送回远程服务器 但收到一条错误消息 该消息没有产生任何有用的信息 fatal read error Invalid argument Ps 服务器和本地rep
  • PDO - 获取 COUNT(*) 的结果?

    在新用户注册过程中 我试图查找用户名或用户电子邮件是否已在数据库中 为此 我想查找标识符 电子邮件或用户名 与数据库中的记录匹配的行数 如果我没有搞砸 唯一可能的返回值是 0 或 1 我的函数如下 但我需要帮助才能完成它 function
  • 客户端验证无法使用 validate() 进行工作

    我正在 validate 方法中进行验证 public void validate if continent equals 1 HttpServletRequest request ServletActionContext getReque
  • 以编程方式删除按钮上的事件侦听器

    我有一个注册的按钮onclick事件如图所示
  • MySQL自动递增每个在其他列中输入的不同值? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我想在我的 mysql 数据库中创建一个列 该列会自动递增以响应输入到另一列的特定值 例如 下面的数据 当学生使用该网站创建新记录时 他 她将输入班级名称并分配一个数字变量 特定于该班
  • 创建一个返回表的 Oracle 函数

    我正在尝试在包中创建一个返回表的函数 我希望在包中调用该函数一次 但能够多次重复使用其数据 虽然我知道我在 Oracle 中创建了临时表 但我希望保持干燥 到目前为止 这就是我所拥有的 Header CREATE OR REPLACE PA