📄 plgerr.spb
字号:
CREATE OR REPLACE PACKAGE BODY PLGerr
IS
/* PL/Generator Error Handling Package */
/*----------------------------------------------------------------
|| PL/Generator from Quest Software
||----------------------------------------------------------------
|| File: PLGerr.spb
|| Author: Steven Feuerstein
||
|| This is a part of the PL/Generator Code library.
|| Copyright (C) 1997-1998 Quest Software, Inc.
|| All rights reserved.
||
|| For more information, call Quest Software at 1-800-REVEAL4
|| or check out our Web page: www.Quest Software.com
||
------------------ Modification History --------------------------
|| Date By Description
|| -------- ------ -----------------------------------------------
|| 04/98 SEF Created on Kangaroo Island
-----------------------------------------------------------------*/
g_errtext PLGadmin.maxvc2 := NULL;
g_errcontext PLGadmin.maxvc2 := NULL;
g_errcode INTEGER := 0;
g_raise BOOLEAN := TRUE;
PROCEDURE pl (str IN VARCHAR2)
IS
BEGIN
IF LENGTH (str) > 80
THEN
DBMS_OUTPUT.PUT_LINE (substr (str, 1, 80));
pl (substr (str, 81));
ELSE
DBMS_OUTPUT.PUT_LINE (str);
END IF;
END;
PROCEDURE assert (
bool IN BOOLEAN,
msg IN VARCHAR2 := NULL,
err IN INTEGER := NULL
)
IS
BEGIN
IF NOT bool OR bool IS NULL
THEN
IF msg IS NOT NULL
THEN
pl (msg);
END IF;
PLGerr.raise (NVL (err, general_error), msg);
END IF;
END;
PROCEDURE assert (
bool IN BOOLEAN,
err IN INTEGER
)
IS
BEGIN
assert (bool, errtext (err), err);
END;
PROCEDURE iraise (
raiseexc IN BOOLEAN,
err_in IN INTEGER,
text_in IN VARCHAR2 := NULL,
add_to_stack IN BOOLEAN := TRUE
)
IS
new_settings BOOLEAN := FALSE;
v_raiseexc BOOLEAN := raiseexc;
BEGIN
IF NOT add_to_stack OR (g_errcode = 0 AND err_in != 0)
THEN
/* Later implement a stack. For now, this simply means
that the current error code/message is passed onwards
if none have yet been defined within PL/Generator. */
g_errcode := err_in;
BEGIN
g_errtext := text_in;
EXCEPTION
WHEN VALUE_ERROR
THEN
g_errtext := SUBSTR (text_in, 1, 32767);
END;
new_settings := TRUE;
ELSE
NULL;
END IF;
IF v_raiseexc
THEN
RAISE_APPLICATION_ERROR (-20000, 'PLG-' || g_errcode || ': ' || g_errtext);
ELSE
pl ('Generation Error!');
pl (' CGML-'|| g_errcode);
pl (' Error: ' || g_errtext);
pl (' Context: ' || g_errcontext);
END IF;
END;
PROCEDURE raise (
err_in IN INTEGER,
text_in IN VARCHAR2 := NULL,
add_to_stack IN BOOLEAN :=TRUE,
raiseexc IN BOOLEAN := raising
)
IS
BEGIN
iraise (
raiseexc =>TRUE /* temporary override raiseexc */,
err_in => err_in,
text_in => text_in,
add_to_stack => add_to_stack
);
END;
PROCEDURE raise (
text_in IN VARCHAR2,
add_to_stack IN BOOLEAN :=TRUE,
raiseexc IN BOOLEAN := raising
)
IS
BEGIN
PLGerr.raise (general_error, text_in, add_to_stack, raising);
END;
PROCEDURE notify (
err_in IN INTEGER,
text_in IN VARCHAR2 := NULL,
add_to_stack IN BOOLEAN :=TRUE
)
IS
BEGIN
iraise (
raiseexc => FALSE,
err_in => err_in,
text_in => text_in,
add_to_stack => add_to_stack
);
END;
PROCEDURE notify (
text_in IN VARCHAR2,
add_to_stack IN BOOLEAN :=TRUE
)
IS
BEGIN
PLGerr.notify (general_error, text_in, add_to_stack);
END;
FUNCTION errtext (err_in IN INTEGER := NULL) RETURN VARCHAR2
IS
CURSOR err_cur
IS
SELECT info
FROM plg_doir
WHERE driver = PLGdoir.c_global
AND owner = PLGdoir.c_global
AND objtype = c_errinfo
AND objname = PLGdoir.c_global
AND attrname = PLGdoir.c_global
AND attrtype = PLGdoir.c_global
AND infotype = PLGdoir.c_global
AND infoseq = err_in;
err_rec err_cur%ROWTYPE;
BEGIN
IF err_in IS NULL
THEN
RETURN g_errtext;
ELSE
OPEN err_cur; FETCH err_cur INTO err_rec;
RETURN err_rec.info;
END IF;
END;
FUNCTION errcode RETURN INTEGER
IS
BEGIN
RETURN g_errcode;
END;
PROCEDURE reset (reset_context IN BOOLEAN := TRUE)
IS
BEGIN
IF reset_context THEN g_errcontext := NULL; END IF;
g_errtext := NULL;
g_errcode := 0;
END;
PROCEDURE adddef (
err_in IN INTEGER,
text_in IN VARCHAR2
)
IS
BEGIN
PLGpriv.assert (PLGpriv.deferr);
PLGdoir.ins (drv => PLGdoir.global,
sch => PLGdoir.c_global,
objname_in => PLGdoir.c_global,
objtype_in => c_errinfo,
attrname_in => PLGdoir.c_global,
attrtype_in => PLGdoir.c_global,
infotype_in => PLGdoir.c_global,
seq_in => err_in,
info_in => text_in);
END;
PROCEDURE remdef (
err_in IN INTEGER
)
IS
BEGIN
PLGpriv.assert (PLGpriv.deferr);
DELETE
FROM plg_doir
WHERE driver = PLGdoir.c_global
AND owner = PLGdoir.c_global
AND objtype = c_errinfo
AND objname = PLGdoir.c_global
AND attrname = PLGdoir.c_global
AND attrtype = PLGdoir.c_global
AND infotype = PLGdoir.c_global
AND infoseq = err_in;
END;
PROCEDURE doraise IS BEGIN g_raise := TRUE; END;
PROCEDURE nodoraise IS BEGIN g_raise := FALSE; END;
FUNCTION raising RETURN BOOLEAN IS BEGIN RETURN g_raise; END;
PROCEDURE set_context (str IN VARCHAR2) IS
BEGIN g_errcontext := str; END;
FUNCTION context RETURN VARCHAR2 IS BEGIN RETURN g_errcontext; END;
END PLGerr;
/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -