Эта проблема может встречаться в пределах диапазона версий для БД.
Ошибка может возникнуть из-за компиляции конвейерной функции, возвращающей таблицу PL / SQL с my_cur%ROWTYPE
, когда встречаются следующие ситуации:
- курсор [или таблица]
my_cur
, на который ссылается my_cur%ROWTYPE
, принадлежит схеме, отличной от функции - в другой схеме есть другая функция с тем же именем, что и ошибочная функция
- this
other function
ссылается на тот же курсор [или таблицу], что и неисправная функция, - this
other function
либо находится в той же схеме, что и курсор [или таблица] или в другом.
Для временного решения подключитесь к sys [или system] и проверьте объекты с недопустимым статусом с помощью
SQL> SELECT owner,object_name,status
FROM dba_objects
WHERE status = 'INVALID'
AND object_type = 'TYPE'
AND object_name LIKE 'SYS_PLSQL_%'
OWNER OBJECT_NAME STATUS
----- -------------------- --------
USER1 SYS_PLSQL_12345_2_1 INVALID
, а затем скомпилируйте возвращаемый тип
SQL> alter type USER1.SYS_PLSQL_12345_2_1 compile;
SQL> show error
может вернуть PLS-00201 для другого типа, такого как
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/44 PLS-00201: identifier 'USER2.SYS_PLSQL_12346_7_1' must be declared
, а затем предоставить привилегию исполнения владельцу недопустимого типа
SQL> grant execute on USER2.SYS_PLSQL_12346_7_1 to USER1;
, а затем перекомпилировать неверный тип
SQL> alter type USER1.SYS_PLSQL_12345_2_1 compile;
SQL> show error
и перепроверять объекты с недействительным статусом по вышеуказанному запросу, если не возвращает строки, соответствующий пакет можно безопасно скомпилировать
SQL> alter package USER1.mypackage compile;
Ref. Do c ID 1185303.1 из Oracle Поддержка