如果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服务到这两个触发器的调用很多。
答案 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服务的例外情况。 上面的内容是一个小小的测试,可以达到这个结论。