Конвейерная функция выдает ошибку «PLS-00630» при компиляции - PullRequest
0 голосов
/ 15 апреля 2019

Я новичок в табличных функциях. Я получаю сообщение "PLS-00630 должна иметь поддерживаемый тип возвращаемого значения коллекции при попытке компилировать пакет с функцией.

Цель функции - вернуть список записей из таблицы аудита RUN_LOG. Требуется дата ввода, которая будет возвращать записи за эту дату.

Типы данных объекта PROCS_COMPLETED соответствуют таблице RUN_LOG.

Создал эти объекты:

CREATE OR REPLACE TYPE PROCS_COMPLETED IS OBJECT (
    RECORD_ID      NUMBER
  , RUN_START_DATE DATE
  , RUN_END_DATE   DATE
  , OWNER          VARCHAR2(50)
  , PROC_NAME      VARCHAR2(162)
);

CREATE OR REPLACE TYPE PROCS_COMPLETED_INFO IS TABLE OF PROCS_COMPLETED;

Объявление функции в спецификации пакета:

FUNCTION GET_PROCS_COMPLETED(ID_DATE IN DATE) RETURN PROCS_COMPLETED PIPELINED;

Функция в корпусе упаковки:

FUNCTION GET_PROCS_COMPLETED(ID_DATE IN DATE) RETURN PROCS_COMPLETED PIPELINED AS
BEGIN
  FOR C_PROCS_COMPLETED IN (
                            SELECT r.RECORD_ID
                                 , r.RUN_START_DATE
                                 , r.RUN_END_DATE
                                 , r.OWNER
                                 , r.PROC_NAME
                              FROM RUN_LOG r
                             WHERE TRUNC(r.RUN_START_DATE) = TRUNC(ID_DATE)
                           )
  LOOP
    PIPE ROW (PROCS_COMPLETED_INFO
               (  C_PROCS_COMPLETED.RECORD_ID
                , C_PROCS_COMPLETED.RUN_START_DATE
                , C_PROCS_COMPLETED.RUN_END_DATE
                , C_PROCS_COMPLETED.OWNER
                , C_PROCS_COMPLETED.PROC_NAME
               )
             );
  END LOOP;
  RETURN;
END;

1 Ответ

0 голосов
/ 15 апреля 2019

Если вы внимательно прочитаете сообщение об ошибке, оно фактически сообщит вам, что не так:

конвейерные функции должны иметь поддерживаемую коллекцию тип возвращаемого значения

(выделено мое).

Итак, RETURN PROCS_COMPLETED_INFO.

Другая ошибка - попытка передать тип коллекции - PIPE ROW (PROCS_COMPLETED_INFO(...)) - пока вы хотите передать ROW: PIPE ROW (PROCS_COMPLETED(...))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...