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。我做了一个简单的改变。我没有使用“提交删除行”,而是使用“提交保留行”
我有一个名为“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 或索引重建。
建议:通过设置
跟踪ddlALTER SYSTEM SET enable_ddl_logging=TRUE scope=memory
然后 运行 您的代码希望有异常,然后检查文件 ddl_.log 的诊断目录。它应该包含 ddl 语句和时间戳。
希望对您有所帮助 - 别忘了重置 ddl-logging
ALTER SYSTEM SET enable_ddl_logging=FALSE scope=memory
我更改了我的全局临时文件后问题就消失了table。我做了一个简单的改变。我没有使用“提交删除行”,而是使用“提交保留行”