为何这段简单PL/SQL程序触发ORA-03113通信通道文件结束错误?
自定义对象类型游标循环触发ORA-03113错误
以下是触发错误的PL/SQL代码:
CREATE OR REPLACE TYPE a IS OBJECT ( b integer, c varchar2(10) ); / declare cursor ca return a is select 1,'e' from dual; va a; begin null; for cur in ca loop DBMS_OUTPUT.PUT_LINE('do nothing'); end loop; end;
执行后抛出错误:
ORA-03113: 通信通道文件结束
进程 ID: 803778
会话 ID: 64 序列号: 4181
问题现象
该循环仅处理一条数据,且循环内无实质业务操作,但仍触发了ORA-03113通信中断错误。
测试结论
经测试:
- 使用包内定义的记录类型替代自定义对象类型时,程序可正常运行
- 不使用记录/对象类型直接查询时,程序也可正常运行
仅在使用自定义对象类型作为游标返回类型时会出现此问题,具体原因暂不明确。
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud
相关产品推荐
相关产品推荐

