PLS-00382: выражение неправильного типа, выполняющее функцию пакета из анонимного блока - PullRequest
0 голосов
/ 19 февраля 2020

Вот моя функция func в моем пакете A:

create or replace PACKAGE A AS

    type MY_TYPE IS TABLE OF MYTABLE%ROWTYPE;

    FUNCTION func RETURN MY_TYPE;

END A;


create or replace PACKAGE BODY A AS

    FUNCTION func RETURN MY_TYPE IS
        CURSOR myCursor IS
           SELECT * FROM MYTABLE;
           var_cursor MYTABLE%ROWTYPE;
           myParam MY_TYPE;
           i NUMBER := 1;

        BEGIN
           FOR var_cursor IN myCursor
           LOOP
             myParam.EXTEND;
             myParam(i) := var_cursor;
             i := i + 1;
           END LOOP;

           RETURN myParam;
        END func;
END A;

Я хочу вызвать эту функцию.

DECLARE
 type my_type IS TABLE OF MYTABLE%ROWTYPE;
 variable my_type;

BEGIN
   variable := A.func();
END;

Это дает ошибку

PLS-00382: выражение имеет неправильный тип

Типы одинаковы, так что я делаю не так и как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вам необходимо использовать того же типа , а не идентичный, но отдельно определенный тип:

DECLARE
 variable a.my_type;

BEGIN
   variable := A.func();
END;
0 голосов
/ 19 февраля 2020

Ваша функция не скомпилируется. Если вы используете "end " для завершения sh aa функции / процедуры, то в этом случае "end func;" Кроме того, вы делаете слишком много кода. Нет необходимости в L OOP, вместо этого используйте оптовый сбор.

...