Oracle dbms_输出缓冲区溢出异常能否被语句句柄未执行异常覆盖?

Oracle dbms_输出缓冲区溢出异常能否被语句句柄未执行异常覆盖?,oracle,oracle11g,Oracle,Oracle11g,如果Proc 1抛出ORA-20000:ORU-10027:buffer overflow,limit of 20000 bytes error,而另一个过程Proc 2的第一行代码是dbms_输出语句,它的out参数是sys_refcursor,那么第二个Proc throw语句是否未处理异常或缓冲区溢出异常 Proc 2未将任何select语句设置为异常块中的curosr。而且,有很多来自web服务的调用同时从多台机器调用这两个进程 CREATE OR REPLACE PROCEDURE p

如果Proc 1抛出ORA-20000:ORU-10027:buffer overflow,limit of 20000 bytes error,而另一个过程Proc 2的第一行代码是dbms_输出语句,它的out参数是sys_refcursor,那么第二个Proc throw语句是否未处理异常或缓冲区溢出异常

Proc 2未将任何select语句设置为异常块中的curosr。而且,有很多来自web服务的调用同时从多台机器调用这两个进程

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;
当一个进程溢出DBMS缓冲区并将SYS REFCURSOR作为OUT参数而不是缓冲区溢出异常时,语句句柄NOT EECUTED异常将抛出到WEB服务。
上面给出的是一个得出这一结论的小测试。

你认为有人会基于此帮助你吗?想想第三个人,他必须想象你的数据库和代码与你的段落。请详细说明并提供更多信息。Post代码(如适用)。过程proc_1 a varchar begin dbms_output。put_行“此输出被多次重计数”dbms_output。put_行“此输出被多次重计数”-此输出被多次重计数end proc_1;在调用此进程的WEBSERVICE日志中,我可以看到进程1的缓冲区溢出异常。另一个proc proc 2在从同一web服务调用Exceptions时也会抛出ExceptionsN,Exceptions是未执行的语句句柄。代码:过程proc_2 cur out sys_REF CURSOR begin dbms_out_putline1;为用户选择*打开cur;其他人提出终止时的例外情况;当proc 2的第一条语句为dbms out putline时,是否引发缓冲区溢出异常;当sys ref cursor未在异常块中分配select语句时,是否通过未执行的语句句柄引发缓冲区溢出异常。如果需要任何其他信息,请告诉我。请编辑您的问题以添加新信息,特别是代码和;不要将大量文本转储到难以阅读的注释中。尝试为初学者增加输出缓冲区。您可以使用Oracle 10g的无限缓冲区。对不起,alex,我无法意识到caps lock已打开。我已经回答了答案中的问题。这不是问题的一部分。请再读一遍。再次为caps感到抱歉。我不确定它是否回答了这个问题,它可能显示了如何复制它的一部分,尽管它没有按原样编译,而且您还没有显示如何调用它以获得错误。它没有解释为什么——我认为这取决于异常处理程序中的dbms_输出。不过,我想,只要你的回答令你满意。。。