当我尝试执行下面的代码时,我得到了上面的错误。这是我的代码
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;
发布于 2020-01-12 20:14:31
错误看起来很明显,但这里有一个详细说明。
您的光标定义为:
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
定义为:
FETCH c2 INTO ref_value;
这会尝试将结果放入一列中。
更改游标定义以删除order_id
或更改FETCH
以包含两个参数。
然后,在这个运行之后,您可能会得到一个错误,因为您的游标没有参数,但您正在尝试传递一个参数。
https://stackoverflow.com/questions/59703665
复制相似问题