Oracle 16/3 PL/SQL:SQL语句被忽略,16/3 PLS-00394:FETCH语句的INTO列表中的值数目错误
当我尝试执行下面的代码时,我得到了上面的错误。这是我的密码Oracle 16/3 PL/SQL:SQL语句被忽略,16/3 PLS-00394:FETCH语句的INTO列表中的值数目错误,oracle,plsql,Oracle,Plsql,当我尝试执行下面的代码时,我得到了上面的错误。这是我的密码 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_ord
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;
错误似乎很明显,但这里有一个详细说明 您的光标定义为:
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;
FETCH c2 INTO ref_value;
这将返回两列--order\u id
和表达式结果
您的FETCH
定义为:
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;
FETCH c2 INTO ref_value;
这将尝试将结果放在一列中
将光标定义更改为删除order\u id
,或将FETCH
更改为包含两个参数
然后,在运行之后,您可能会得到一个错误,因为您的光标没有参数,但您正试图传入一个参数