Наша база данных Oracle была недавно обновлена с 12.1.0.2 до 12.2.0.1 + обновление набора обновлений 20180417.
С момента обновления мы получаем следующую ошибку при вызове процедуры plsql: ORA-21700: объект не существует или помечен для удаления
Мы сузили проблему, и она, кажется, вызвана использованием табличного оператора в ассоциативном массиве, определенном в пределахпакет.Все мои исследования показывают, что то, что мы делаем, было введено в 12.1 и должно работать в 12.2.
Ниже приведена упрощенная версия процедуры, которая терпит неудачу вместе с определением связанного типа.Он вызывается из кода c # с использованием управляемого доступа к данным.
Вот определение типа ассоциативного массива в пакете:
TYPE NUMBER_ARRAY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
Вот процедура, которая завершается ошибкой:
PROCEDURE GetReadingStatus(
STATUSID_ARR IN NUMBER_ARRAY,
P_RETURNS OUT SYS_REFCURSOR
)
BEGIN
OPEN P_RETURNS FOR
SELECT * FROM READINGSTATUS rs
WHERE rs.statusID IN (select * from table(STATUSID_ARR));
END;
Он запускается, если удаляется часть select * from table(STATUSID_ARR)
.
Есть ли проблема с использованием оператора таблицы в ассоциативных массивах в 12.2?Может ли проблема быть вызвана чем-то другим?