PLS-00394: fetch 语句的 INTO 列表中的值数量错误

2024-04-13

这是我在存储过程中创建游标的尝试

   --Second Stored Procedure--
 CREATE OR REPLACE PROCEDURE sp_GetDiscountedRate (DiscountCode IN    
VARCHAR2,Percentage IN NUMBER, ReserveDate IN DATE)
 IS  --Code declaration section--
--variables to store column values returned from select into
 pPassengerID            VARCHAR2(10);
 pFirst                  VARCHAR2(20);
 pMiddle                 VARCHAR2(20);
 pLast                   VARCHAR2(20);
 pPassengerType          CHAR (1);
 uUSMilitaryID           VARCHAR (8);
 uMilitaryBranch         VARCHAR2 (20);
 uMilitaryDiscountCode   VARCHAR2(8);
 rFlightNumber           VARCHAR2(6);
 rReservationCost        NUMBER(6);
 rReservationDate        DATE;
 --Declare Cursor
            CURSOR cur_USMilitary IS
            --Query cursor will point to results 
  SELECT P.PassengerID, P.First, P.Middle, P.Last, P.PassengerType,    
  U.USMilitaryID, U.MilitaryBranch,   
  U.MilitaryDiscountCode, R.FlightNumber, R.ReservationCost,   
  R.ReservationDate,
  CASE U.MilitaryDiscountCode WHEN DiscountCode THEN   
  Percentage*R.ReservationCost 
  ELSE R.ReservationCost END "REVISED_RESERVATION_COST"
  FROM PASSENGER P, US_Military U, RESERVATION R
  WHERE P.PassengerID = U.MPassengerID
  AND P.PassengerID = R.PassengerID
  AND U.MilitaryDiscountCode = DiscountCode
  AND R.ReservationDate = ReserveDate;

       --Start Execution section--
BEGIN 
      --Open Cursor
     OPEN cur_USMilitary; --  open cursor for use   
     --loop to display each record returned by cursor 
     --Use PL/SQL language control or loop to display each record pointed by cursor 
    LOOP
        --Fetch cursor data
        FETCH cur_USMilitary INTO pPassengerID,  
       pFirst,pMiddle,pLast,pPassengerType,

uUSMilitaryID,uMilitaryBranch,uMilitaryDiscountCode,rFlightNumber,
rReservationCost,rReservationDate;
        EXIT WHEN cur_USMilitary%NOTFOUND;
        --Display each record
        --Displaying the results
DBMS_OUTPUT.PUT_LINE ('CUSTOMER INFORMATION: ');
DBMS_OUTPUT.PUT_LINE ('The PassengerID is:  ' ||pPassengerID);
DBMS_OUTPUT.PUT_LINE ('First Name of passenger is:  ' ||pFirst);
DBMS_OUTPUT.PUT_LINE ('Middle Name of passenger is:  ' ||pMiddle);
DBMS_OUTPUT.PUT_LINE ('Last Name of passenger is:  ' ||pLast);
DBMS_OUTPUT.PUT_LINE ('Passenger Type of customer is: ' ||pPassengerType);
DBMS_OUTPUT.PUT_LINE ('US Military ID of Passenger is:  ' ||uUSMilitaryID);
DBMS_OUTPUT.PUT_LINE ('Military Branch of passenger is:  ' ||uMilitaryBranch);
DBMS_OUTPUT.PUT_LINE ('Military Discount code of passenger is:  ' ||uMilitaryDiscountCode);
DBMS_OUTPUT.PUT_LINE ('Flight number of passenger is:  ' ||rFlightNumber);
DBMS_OUTPUT.PUT_LINE ('Reservation Cost of passenger is:  ' ||rReservationCost);
DBMS_OUTPUT.PUT_LINE ('Reservation Date of passenger is:  ' ||rReservationDate);

END LOOP; 



    CLOSE cur_USMilitary; --close cursor

 END sp_GetDiscountedRate;

我收到此错误:

Error(36,9): PL/SQL: SQL Statement ignored
Error(36,9): PLS-00394: wrong number of values in the INTO list of a FETCH statement

我完全理解这个错误。我检查了列数,在我看来它们与查询中的列数匹配。我还检查了数据类型以确保它是正确的。


你有

光标的 SELECT 部分有 12 列

but

FETCH 语句部分 11 列

,我观察到

CASE U.MilitaryDiscountCode WHEN DiscountCode THEN   
  Percentage*R.ReservationCost 
  ELSE R.ReservationCost END "REVISED_RESERVATION_COST"

部分缺失FETCH( 或者应该在SELECT part ).

它还代表一列,它会破坏 1-1 对应关系,从而产生该错误。

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

PLS-00394: fetch 语句的 INTO 列表中的值数量错误 的相关文章

  • MS SQL 2008 如何读取日志

    我有一个有很多行的表 有什么办法可以找出来当插入具体行时 我没有创建 更新时间列 Thanks 检查日志以读取此类信息可以在单个日志条目的基础上完成 但该格式仍然没有记录 而且解码起来确实不容易 我只会出于纯粹的兴趣或取证目的而查看它 如果
  • 如何使用过程更改列的默认值

    这是我当前的 SQL 的样子 DELIMITER CREATE PROCEDURE updateDefaultUserRole IN rid in INT BEGIN ALTER TABLE users MODIFY rid INT 255
  • MySQL SUM 具有相同的 ID

    抱歉 这个真正简单的问题 我刚刚学习 PHP 和 MySQL 我已经在谷歌上搜索了一个多星期 但没有找到任何答案 我创建了一个简单的财务脚本 表格如下 table a aid value 1 100 2 50 3 150 table b b
  • PL/pgSQL 中的 EXPLAIN ANALYZE 给出错误:“查询没有结果数据的目的地”

    我试图理解 PL pgSQL 函数中 select 语句的查询计划 但我不断收到错误 我的问题 如何获取查询计划 以下是重现该问题的简单案例 相关表名为 test table CREATE TABLE test table name cha
  • 运行时 SQL 查询生成器

    我的问题类似于 Java中有什么好的动态SQL生成器库吗 https stackoverflow com questions 5620985 is there any good dynamic sql builder library in
  • 非聚合查询内部的聚合情况

    我有一个相当大的查询 其最简单的形式如下所示 select r rep id u user id u signup date pi application date pi management date aum from table1 r
  • 如何关闭 Oracle 密码过期功能?

    我正在使用 Oracle 进行开发 我经常用于重建数据库的引导帐户的密码已过期 如何永久关闭该用户 以及所有其他用户 的密码过期功能 我使用的是 Oracle 11g 默认情况下密码会过期 要更改 Oracle 中某个用户配置文件的密码过期
  • SSIS ODBC SQL 参数

    我在 odbc 源数据流任务中有一个 SQL 命令需要采用参数 但不存在添加参数的选项 我尝试将数据库添加为与 ODBC 提供程序的 ADO NET 连接 但也没有可用的参数 还尝试将其作为 OLEDB 连接 但没有可用于 ODBC 的提供
  • 在Oracle中,是否可以将以逗号分隔的非常大的字符串(clob)转换为具有更好性能的表

    我需要通过逗号分隔符将非常大的 clob 字符串转换为表 下面的函数需要很长时间 有没有返回表的快速函数 create or replace FUNCTION UDF STRSPLIT2 P STR IN CLOB P DELIM IN V
  • 从另一列计算出的列?

    给出下表 id value 1 6 2 70 有没有办法添加根据同一个表中的另一列自动计算的列 与 VIEW 类似 但属于同一个表的一部分 举个例子 calculated将是一半value Calculated应该会自动更新value变化
  • LINQ Group By 投影成非匿名类型?

    我有以下 LINQ 示例 var colorDistribution from product in ctx Products group product by product Color into productColors select
  • 使用多个小数点 (.) 对 Oracle 中的记录进行排序

    UPDATE 甲骨文版本10G 我有一个记录列表Oracle如下 这些其实是各种书籍的章节记录按以下格式生成 主主题 子主题 第一级部分 最后级部分 Sections 1 7 1 6 2 7 1 7 4 6 8 3 6 8 2 10 1 1
  • 从 Hibernate 生成 SQL 脚本

    我正在为我的 Java Swing 应用程序使用 Hibernate 4 3 5 Final 并且我做了很多工作UDPATE INSERT and DELETE与它 在 HQL 中或与Criteria 现在 我想做的是导出对数据库所做的所有
  • PL/SQL:如何声明会话变量?

    如何在 PL SQL 中声明一个会话变量 该变量仅在会话期间持续存在 而无需将其存储在数据库本身中 您可以使用 用户创建的上下文 来存储会话中多个单元共享的数据 首先 创建一个上下文 CREATE CONTEXT SYS CONTEXT u
  • sql 查询查找匹配属性

    我目前正在做一个类似易货系统的系统 情况是这样的 客户 Jasmine 要求输入 NAME 属性 她需要寻找的内容 并输入 SEEK 属性 她需要寻找的内容 为了获得结果 SEEK 属性必须与其他客户的 Name 属性匹配 其他客户的 SE
  • 为什么 Redshift 不需要物化视图或索引?

    In the 红移常见问题解答 https aws amazon com redshift faqs under 问 与大多数用于数据仓储和分析的传统数据库相比 Amazon Redshift 的性能如何 它说如下 高级压缩 列式数据存储比
  • 如何对 MySQL 数据库中的 ENUM 列进行排序?

    I have colorMySQL 表中的列类型为ENUM RED YELLOW MY COLOR BLACK 还有另一个name列的类型是VARCHAR 30 我想按以下顺序获取所有表行 YELLOW首先行 排序依据name RED最后一
  • SQL Server 选择具有最近日期时间的记录

    我有一张表如下 MyJob MyKey MyCode MyDate MyTime q183b 0131081a 24 100315 9 37 q183b 0131081a 9 100315 11 38 q183b 0132426a 1 90
  • 使用 Oracle 中的 Join 查询进行更新

    查询有什么问题 它无限期地执行 UPDATE table1 t1 SET t1 col t1 Output SELECT t2 col t3 Output t2 col FROM tabl2 t3 LEFT JOIN table1 t2 O
  • MySQL/Postgres查询5分钟间隔数据

    我需要查询方面的帮助 假设这是表中的数据 timestamp 2010 11 16 10 30 00 2010 11 16 10 37 00 2010 11 16 10 40 00 2010 11 16 10 45 00 2010 11 1

随机推荐