我们的 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 中对关联数组使用表运算符有问题吗?问题可能源于其他原因吗?