Я пытаюсь создать функцию для получения списка значений из моей базы данных.После некоторых исследований я обнаружил, что мне нужно использовать функцию PIPELINE, и я нашел несколько примеров.Я выполнил свою функцию, но я как-то получил 2 ошибки, которые я не понимаю.
Вот мой код:
CREATE OR REPLACE TYPE LISTE_VALUES AS TABLE OF VARCHAR2(2000);
/
CREATE OR REPLACE FUNCTION F_GET_VAL(
PI_1 IN VARCHAR2,
PI_2 IN NUMBER,
PI_3 IN VARCHAR2)
RETURN LISTE_VALUES PIPELINED
IS
W_ROW_COUNT NUMBER := 0;
BEGIN
FOR CUR IN (SELECT VALUE FROM TABLE
WHERE ...
...
)
LOOP
PIPE ROW (CUR);
W_ROUNT_COUNT := W_ROW_COUNT + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('There were '
|| W_ROW_COUNT
|| ' rows selected' );
END F_GET_VAL;
/
И вот такие ошибки я получаю:
[Ошибка] PLS-00382: PLS-00382: выражение имеет неправильный тип (в строке: PIPE ROW (CUR);)
[Ошибка] PLS-00201: PLS-00201: идентификатор 'W_ROUNT_COUNT 'должен быть объявлен
(в строке: W_ROUNT_COUNT: = W_ROW_COUNT + 1;)
Для первой ошибки, которую я трижды проверил, и VALUE
в моей таблице имеет типVARCHAR2(2000)
, точно так же, как я объявил свой тип в начале (таблица VARCHAR2(2000)
).
И, во-вторых, я не понимаю, потому что я объявил переменную W_ROW_COUNT
в своем операторе IS.
Если бы кто-то мог мне помочь, было бы здорово!Спасибо