ORA-08103: .net 中不再存在对象

ORA-08103: object no longer exists in .net

我有一个名为“GLOBAL_T”的全局临时 table(在提交删除行时)和一个将 SYS_REFCURSOR 作为 OUTPUT 参数的存储过程。

所以你可以这样想一个存储过程:

PROCEDURE test (POT_CURSOR OUT SYS_REFCURSOR)
IS
BEGIN

--TO FILL THE GTT, CALL ANOTHER PROCEDURE
--BTW, FOLLOWING PROCEDURE HAS NO COMMIT
A_SCHEMA_NAME.A_PACKAGE_NAME.ANOTHER_PROCEDURE();

OPEN POT_CURSOR FOR
SELECT STH FROM GLOBAL_T, BUNCH_OF_OTHER_TABLES B
WHERE B.BLABLA = GLOBAL_T.BLABLA
AND B.BUNCH_OF_OTHER_COLUMNS = T.OTHER_COLUMNS;

END;

问题是当我在 pl/sql 块中调用过程时它工作正常。但是当我从 .NET 调用该过程时,它给我 ORA-08103: object no longer exists

调用完全一样。由于程序背后的业务逻辑是巨大的,我试图简化它们。

也许您可以查看 oracle-support 和 Doc ID 8103.1。当其他会话正在对 tables 或索引执行 ddl 语句而您的 sql 是 运行ning - 即 t运行cate table 或索引重建。

建议:通过设置

跟踪ddl
ALTER SYSTEM SET enable_ddl_logging=TRUE scope=memory

然后 运行 您的代码希望有异常,然后检查文件 ddl_.log 的诊断目录。它应该包含 ddl 语句和时间戳。

希望对您有所帮助 - 别忘了重置 ddl-logging

ALTER SYSTEM SET enable_ddl_logging=FALSE scope=memory

我更改了我的全局临时文件后问题就消失了table。我做了一个简单的改变。我没有使用“提交删除行”,而是使用“提交保留行