⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plgerr.spb

📁 Oracle PL/SQL procedure generator (second generator type)
💻 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 + -