首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >16/3 PL/ SQL :忽略SQL语句,16/3 PLS-00394: FETCH语句的INTO列表中的值数目错误

16/3 PL/ SQL :忽略SQL语句,16/3 PLS-00394: FETCH语句的INTO列表中的值数目错误
EN

Stack Overflow用户
提问于 2020-01-12 20:12:01
回答 1查看 338关注 0票数 0

当我尝试执行下面的代码时,我得到了上面的错误。这是我的代码

代码语言:javascript
运行
复制
CREATE OR REPLACE PROCEDURE proc_ref_value(orderId IN orders.order_id%TYPE)
IS
ref_value   NUMBER;
CURSOR c2 (orderId orders.order_id%TYPE) IS 
SELECT order_id,
    CASE 
    WHEN   order_status='refunded' THEN total_order*0.25
    WHEN   order_status='completed' THEN  total_order* 0
    WHEN   order_status='cancelled' THEN total_order*0
    END 
    FROM orders;

BEGIN
    OPEN c2(orderId);
    LOOP
        FETCH c2 INTO ref_value;
        EXIT WHEN c2%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(ref_value);
    END LOOP;
    CLOSE c2;
END;
EN

回答 1

Stack Overflow用户

发布于 2020-01-12 20:14:31

错误看起来很明显,但这里有一个详细说明。

您的光标定义为:

代码语言:javascript
运行
复制
SELECT order_id,
       (CASE WHEN order_status='refunded' THEN total_order*0.25 
             WHEN order_status='completed' THEN total_order* 0 
             WHEN order_status='cancelled' THEN total_order*0 
        END)
FROM orders; 

这将返回两列-- order_id和表达式结果。

您的FETCH定义为:

代码语言:javascript
运行
复制
FETCH c2 INTO ref_value;

这会尝试将结果放入一列中。

更改游标定义以删除order_id或更改FETCH以包含两个参数。

然后,在这个运行之后,您可能会得到一个错误,因为您的游标没有参数,但您正在尝试传递一个参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59703665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档