返回 PL/SQL 函数中的表

2024-01-04

我正在开发一个 SQL 项目。我想创建一个返回表的 sql*Plus 函数。 我做了这样的事情,但它不起作用,我不知道为什么:

CREATE OR REPLACE FUNCTION changeNbPersonnes(recette IN int, nbPersonne IN int)
RETURN table_res TABLE
(
  idIngredient int NOT NULL,
  nomIngredient varchar(255) NOT NULL,
  quantite int NOT NULL
)
AS
  CURSOR curseur_etape IS
  SELECT * FROM IngredientRecette ir
  JOIN recette r
  ON ir.idrecette=r.idrecette
  JOIN ingredient i
  ON ir.idingredient=i.idingredient
  WHERE r.idrecette=recette;
BEGIN
  FOR row_ingredient IS
    INSERT INTO res(idIngredient,nomIngredient,quantite)
    VALUES(
      row_ingredient.idingredient,
      row_ingredient.Nom,
      row_ingredient.quantite
    );
  END FOR;
  RETURN res;
END;
/

你能帮助我吗 ? “RETURN table_res TABLE”有问题


您使用的语法肯定是 Oracle 不支持的PLSQL。在甲骨文中PLSQL你需要做类似的事情:

-- Create Object of your table
CREATE TYPE TABLE_RES_OBJ AS OBJECT (
     IDINGREDIENT                  INT ,
     NOMINGREDIENT                 VARCHAR (255) ,
     QUANTITE                      INT 
);

--Create a type of your object 
CREATE TYPE TABLE_RES AS TABLE OF TABLE_RES_OBJ;
/

--Function Use the type created as Return Type
CREATE OR REPLACE FUNCTION CHANGENBPERSONNES (
     RECETTE      IN   INT,
     NBPERSONNE   IN   INT)
     RETURN TABLE_RES
AS
     CURSOR CURSEUR_ETAPE
     IS
          SELECT  TABLE_RES_OBJ (IR.*)
            FROM INGREDIENTRECETTE IR 
            JOIN RECETTE R ON IR.IDRECETTE =R.IDRECETTE
                 JOIN INGREDIENT I ON IR.IDINGREDIENT = I.IDINGREDIENT
           WHERE R.IDRECETTE = RECETTE;

     VAR       TABLE_RES:= TABLE_RES();
BEGIN
     OPEN CURSEUR_ETAPE;

     LOOP
          FETCH CURSEUR_ETAPE
          BULK COLLECT INTO VAR LIMIT 100;

          EXIT WHEN CURSEUR_ETAPE%NOTFOUND;
     END LOOP;

     CLOSE CURSEUR_ETAPE;

     RETURN VAR;
END;
/

或者根据 @a_horse_with_no_name,使用 PipeLine 函数,它可能如下所示:

CREATE OR REPLACE FUNCTION CHANGENBPERSONNES (RECETTE      IN INT,
                                              NBPERSONNE   IN INT)
   RETURN TABLE_RES
   PIPELINED
AS
   CURSOR CURSEUR_ETAPE
   IS
      SELECT *
        FROM INGREDIENTRECETTE IR
             JOIN RECETTE R ON IR.IDRECETTE = R.IDRECETTE
             JOIN INGREDIENT I ON IR.IDINGREDIENT = I.IDINGREDIENT
       WHERE R.IDRECETTE = RECETTE;
BEGIN
   FOR i IN CURSEUR_ETAPE
   LOOP
      PIPE ROW (TABLE_RES_OBJ (i.idingredient, i.Nom, i.quantite));
      EXIT WHEN CURSEUR_ETAPE%NOTFOUND;
   END LOOP;

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

返回 PL/SQL 函数中的表 的相关文章

  • ORACLE:未找到数据——但数据存在

    调试包过程 当实际上有数据时却找不到数据 仅测试 SELECT SELECT trim trailing from GL SECURITY as DUMMY FROM b2k user b2k WHERE sms username FUCH
  • 显示一个表中的所有记录以及另一表中的匹配记录

    您好 我有一张下表 其中记录了活动和积分 Activites A ID Site ActivityValue ActivityName 1 site1 7 ActivityName1 2 site1 6 ActivityName2 2 si
  • 无重复组合的交叉连接

    我知道这个问题与这个问题非常相似 对称交叉连接 https stackoverflow com questions 12490244 symmetric cross join还有这个 sql 中交叉连接的组合 不是排列 https stac
  • MySQL 跨表计数(*) 查询帮助

    SELECT name COUNT AS count FROM t1 t2 WHERE t2 id t1 id GROUP BY t2 id 我想从 t1 获取名称以及 t2 中 id 与 t1 相同的行数 到目前为止我已经得到了上面的内容
  • 如何从 SQL Server 中的 SELECT 进行更新?

    In SQL服务器 可以将行插入到带有INSERT SELECT陈述 INSERT INTO Table col1 col2 col3 SELECT col1 col2 col3 FROM other table WHERE sql coo
  • 数据库级别的别名列名 [MySQL]

    别名 可能是错误的词 因为它是在将列 表名称作为查询中的其他名称引用的上下文中使用的 我感兴趣的是是否有一种方法可以在数据库中为列指定两个名称 如果我要打印这样的表格 它看起来会是这样的 mysql gt SELECT FROM User
  • Oracle Blob 在 PHP 页面中作为 img src

    我有一个网站当前使用文件服务器上的图像 这些图像显示在页面上 用户可以根据需要拖放每个图像 这是使用 jQuery 完成的 图像包含在列表中 每张图片都非常标准 img src network path image png height 8
  • 如何在事务中使用链接服务器插入远程表?

    我的链接服务器设置正确 我能够执行以下查询 插入 远程服务器 表 SELECT FROM 本地服务器 表 然而当我做同样的事情时交易内 开始传输 插入 远程服务器 表 SELECT FROM 本地服务器 表 提交交易 我收到类似的错误 用于
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • 通过Java从MySQL中获取大量记录

    有一个 MySQL 表 服务器上的用户 它有 28 行和 100 万条记录 也可能会增加 我想从这个表中获取所有行 对它们进行一些操作 然后将它们添加到 MongoDB 中 我知道通过简单的 从用户中选择 操作来检索这些记录将花费大量时间
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字
  • 如何从 MySQL 中的布尔类型返回不同的字符串?

    如果我在 MySql 中将一列设置为布尔值 则查询将返回以下值 0 or 1 是否可以做这样的事情 SELECT bool value AS yes OR no 我的意思是 根据真假返回两个不同的字符串 SELECT CASE WHEN b
  • sql server 2008 对 exec 语句的限制

    我只需要仔细检查 t sql 中的 EXEC 命令是否有字符限制 如果我有一个带有 varchar max 的变量并使用 EXEC 执行命令 你认为这样可以吗 thanks 应该没问题 根据这篇 MSDN 文章 http msdn micr
  • Sql Server 的夏令时

    我们正在使用一个以 C Unix 格式存储日期的旧应用程序 C 时间基本上是自 1970 年 1 月 1 日以来的秒数 日期以整数形式存储在 SQL Server 数据库中 我正在为使用这些日期的报告编写视图 到目前为止 我正在使用以下命令
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • Magento 设置脚本中的 ALTER TABLE 不使用 SQL

    乔纳森 戴 https stackoverflow com users 336905 jonathan day says 更新不应采用以下形式 SQL命令 我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结
  • Oracle 按月滚动或运行总计

    目标 每个月末所有报表的滚动 运行总计 Code select TRUNC ACTHX STMT HX STMT DATE MM AS MNTH COUNT ACTHX INVOICE as STMTS from ACTHX group b
  • 如何使用第二行中的值填充第一行中的空值?

    我正在尝试编写一个查询 仅显示每个名称的第一行 但这些行的标题为空 因此我想从紧邻的下一行中提取它们的标题 table1 Name Title Row Dan NULL 1 Dan Engineer 2 Dan Developer 3 Ja
  • 创建日期范围表

    我正在编写一份需要显示每天值的报告 我有查询的开始日期和结束日期 但我希望避免丢失日期 以防表不包含特定日期的值 我正在考虑创建一个基本日期范围表 其中包含开始和结束之间的所有日期 然后将其与数据表左连接以显示每一天的值 我找到了一些适用于
  • 在 SQL 中按键组对行进行顺序编号?

    SQL中有没有办法按顺序添加行号按关键组 假设一个表包含任意 CODE NAME 元组 示例表 CODE NAME A Apple A Angel A Arizona B Bravo C Charlie C Cat D Dog D Dopp

随机推荐

  • Laravel API 注册用户 - 检查重复电子邮件

    我正在使用 Laravel 5 5 API 路线routes api php像这样注册新用户 Route post users function Request request user new User if Input get name
  • 未设置对象变量或 With 块变量(错误 91)

    我有以下代码 Sub AddSources Dim pubPage As Page Dim pubShape As Shape Dim hprlink As Hyperlink Dim origAddress As String Dim e
  • mac osx:无法使用 virtualenv

    我正在尝试使用 virtualenv 创建一个环境 virtualenv test New python executable in test bin python Error Errno 2 No such file or directo
  • jquery从外部页面循环链接到特定幻灯片?

    仔细研究了所有其他问题 但我无法弄清楚这一点 我有一个主页 其中包含我使用 jquery 循环插件的另一个页面的某些幻灯片 我需要做的是将主页上的链接直接链接到不是组中第一张幻灯片的幻灯片 没什么那么复杂 我的主页上有一个这样的链接 a h
  • PHP preg_replace 的 JavaScript 等效项

    我一直在寻找 PHP 的 js 等效项preg replace功能和我到目前为止发现的只是string replace 但是我不知道如何将我的正则表达式转换为 JavaScript 这是我的 PHP 代码 preg replace str
  • ios 7 模拟器不会为针对 ios 6.1 sdk 编译的应用程序提供回退用户界面

    我们的 ios6 1 sdk 编译的应用程序在 ios 6 1 iPhone 4 4s 和 5 设备上运行良好 当在 ios7 iphone 5s 上运行该应用程序时 用户界面仍然看起来像 ios 6 黑色按钮等 但我们对大部分内容都很好
  • 找不到协议socket.getprotobyname

    我正在尝试连接到rabbitMQ服务器 但它在与a的连接时始终失败socket error protocol not found错误 In 1 import pika In 2 pika BlockingConnection pika Co
  • Python PIL 错误地解码 TIFF 颜色(使用不正确的色彩空间)?

    当我使用PIL 1 1 7加载 TIFF 图像时 颜色空间似乎错误 这是怎么回事 The tiff是使用创建的convert test jpg test tiff 但其他 tiff 文件似乎也会发生 可以在以下位置找到 http hul w
  • 以编程方式对 JTable 进行排序

    有没有办法以编程方式对 JTable 进行排序 我让 JTable 的排序工作 使用 setRowSorter 这样当用户按下任何列时 表就会被排序 我知道 SWingX JXTable 可能会工作 但我不想经历这个麻烦 因为其他一切现在都
  • Android 通知有一个彩色图标,而不是变成白色

    我的 Android 应用使用 Firebase Cloud Messaging 进行通知 当收到通知时 该图标不会像其他图标一样变成白色 我在用着targetSdkVersion 23 我的清单中有这个
  • 正则表达式: ?: 符号(问号和冒号符号)[重复]

    这个问题在这里已经有答案了 我有以下 Java 正则表达式 它不是我编写的 我正在尝试修改 class map s match all s match any s x21 x7e 1 40 它类似于this one https stacko
  • 如何配置 php.ini 以使用 gmail 作为邮件服务器

    I want to learn yii as my first framework And I m trying to make the contact form work But I got this error 我已经配置了 php i
  • 通知通过旧意图附加

    我正在通过以下代码在 BroadcastReceiver 内创建通知 String ns Context NOTIFICATION SERVICE NotificationManager mNotificationManager Notif
  • 像导航抽屉一样实现 Gmail 平板电脑

    我正在研究 Gmail 应用程序的平板电脑设计 在那里面Navigation Drawer实施与其他不同 我已附上图片供您参考 而且当我展开抽屉时 它应该像正常的导航抽屉行为一样发生 我想以同样的方式实施 我正在寻找 但我只找到了这个lin
  • C++ STL 分配器与 new 运算符

    根据C Primer第4版 第755页 有一条注释说 现代 C 程序通常应该使用分配器类 来分配内存 它更安全 更灵活 我不太明白这个说法 到目前为止 我读过的所有材料都教授使用new在C 中分配内存 书中展示了向量类如何使用分配器的示例
  • 创建一个 PHP 文件来下载某个站点的所有链接

    我最近在我的 Firefox 中安装了附加组件 DownThemAll 当我看到它下载大量的 pk3 文件 开源第一人称射击游戏的地图文件 时 我想知道我是否可以使用 PHP 做同样的事情 这就是我的想法 foreach glob http
  • gitignore 除了子子文件夹中的文件之外的所有文件

    我已经尝试了 gitignore 的多种组合 但没有一个能满足我的需要 我有这棵树 jobs jobs projecta config xml jobs projecta garbage jobs projecta more garbage
  • 如何从 jar/bat/ 运行独立的 TestNG 项目

    我有一个 TestNG 项目 没有任何主类 目前它像 Run As TestNG 一样运行 我想将其导出为可运行的 jar 或 jar 以便任何人都可以从命令行输入命令并开始运行测试用例 有人可以帮我解决这个问题吗 或建议任何其他方式以可运
  • 又一个浮点问题

    我已经阅读了这里有关浮点的大部分帖子 并且我了解使用 IEEE 754 并且仅根据以二进制存储数字的性质 无法表示某些分数的基本问题 我试图弄清楚以下问题 如果Python和JavaScript都使用IEEE 754标准 为什么在Pytho
  • 返回 PL/SQL 函数中的表

    我正在开发一个 SQL 项目 我想创建一个返回表的 sql Plus 函数 我做了这样的事情 但它不起作用 我不知道为什么 CREATE OR REPLACE FUNCTION changeNbPersonnes recette IN in