-2

如果 Proc 1 抛出ORA-20000: ORU-10027: buffer overflow , limit of20000 bytes error并且另一个过程 proc 2 有一个dbms_output stement作为第一行代码并且它有一个 sys_refcursor 作为一个输出参数,那么第二个 proc 会抛出“ statement not handled exception”还是“ buffer over flow exception”?

Proc 2 没有在异常块中将任何选择语句设置为 curosr。此外,从多台机器同时从 Web 服务对这两个 procs 进行大量调用。

4

1 回答 1

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 作为 OUT 参数而不是缓冲区溢出异常时,将向 Web 服务抛出语句句柄未执行异常。以上是得出这个结论的一个小测试。

于 2013-09-26T04:19:58.943 回答