16/3 PL / SQL: SQL Оператор игнорируется, 16/3 PLS-00394: неверное количество значений в списке INTO инструкции FETCH - PullRequest
0 голосов
/ 12 января 2020

Когда я пытаюсь выполнить код ниже, я получаю ошибку выше. Это мой код

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;

1 Ответ

0 голосов
/ 12 января 2020

Ошибка кажется довольно очевидной, но здесь есть уточнение.

Ваш курсор определен как:

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, чтобы включить два параметра.

Затем, после этого запуска, вы, вероятно, получите ошибку, потому что у вашего курсора нет параметров, но вы пытаетесь передать один из них.

...