可以通过语句句柄未执行的异常覆盖dbms_output缓冲区溢出异常吗?

时间:2013-09-25 08:00:38

标签: oracle oracle11g

如果Proc 1抛出 ORA-20000:ORU-10027:缓冲区溢出限制20000 bytes error ,另一个程序proc 2有{{1}作为第一行代码并且它有一个sys_refcursor作为out参数,第二个proc会抛出“dbms_output stement”还是“statement not handled exception”?

Proc 2未在异常块中将任何select语句设置为curosr。此外,从多个机器同时从Web服务到这两个触发器的调用很多。

1 个答案:

答案 0 :(得分:0)

CREATE OR REPLACE PROCEDURE proc_test
(
 IN_ATTUID in VARCHAR2,  
  OUT_USER_DETAILS out SYS_REFCURSOR,  
  OUT_ERROR_CODE out NUMBER
)
IS
BEGIN
   tmpVar := 0;
   dbms_output.enable(2000);
  DBMS_OUTPUT.Put_Line('PUT a 2000 BYTE CHARACTER HERE');

dbms_output.put_line('1');

  OUT_ERROR_CODE := NULL;      

   open OUT_USER_DETAILS for select * from t_roles;


  DBMS_OUTPUT.Put_Line('OUT_ERROR_CODE' || OUT_ERROR_CODE);
  commit;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise

       DBMS_OUTPUT.Put_Line('OUT_ERROR_CODE' || OUT_ERROR_CODE);
   --OUT_ERROR_CODE := SQLCODE;
   DBMS_OUTPUT.Put_Line('OUT_ERROR_CODE' || SQLCODE);

       DBMS_OUTPUT.Put_Line('OUT_ERROR_CODE' || SUBSTR(SQLERRM, 1, 800));
       --RAISE;

END proc_test;

当PROC溢出DBMS缓冲区并且SYS REFCURSOR为超出BUFFER溢出异常的参数时,声明处理不被认为是Web服务的例外情况。 上面的内容是一个小小的测试,可以达到这个结论。