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

📄 plgcgml.spb

📁 Oracle PL/SQL procedure generator (second generator type)
💻 SPB
📖 第 1 页 / 共 3 页
字号:
/* Formatted by PL/Formatter v3.1.2.1 on 2001/04/22 18:29 */

CREATE OR REPLACE PACKAGE BODY PLGcgml
IS
/*----------------------------------------------------------------
||                  PL/Generator from Quest Software
||----------------------------------------------------------------
||    File: PLGcgml.spb
||  Author: Steven Feuerstein
||
|| This is a part of the PL/Generator Code library.
|| Copyright (C) 1998-1999 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
|| -------- ------ -----------------------------------------------
|| 3/31/99  SEF    Created from PLGgen
******************************************************************/

   c_package    PLGadmin.identifier := 'plgcgml';
   g_based_on   PLGadmin.identifier := PLGte.driver;

   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;

---------------- Modify Driver Information   

   PROCEDURE set_based_on (drvr IN VARCHAR2)
   IS
   BEGIN
      g_based_on := UPPER (drvr);
   END;

   FUNCTION based_on
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN g_based_on;
   END;

   PROCEDURE clear (
      drvr       IN   VARCHAR2 := NULL,
      sch        IN   VARCHAR2 := NULL,
      delarray   IN   BOOLEAN := FALSE
   )
   IS
      v_drvr   PLGadmin.identifier
                         := NVL (UPPER (drvr), test_driver);
   BEGIN
      /* Clear out old driver information. */
      PLGdoir.delfoundation (drvr);

/* Use cleaner approach
PLGdoir.del (
   drv => v_drvr,
   tab => '%',
   otype => '%',
   itype => '%',
   seq => NULL,
   sch => sch,
   foundation_only => FALSE,
   del_header => TRUE);
*/

      /* And get rid of any old array definitions as well. */
      IF delarray
      THEN
         PLGdoir.delarray (drv => v_drvr, arrayname => '%');
      END IF;
   END;

   PROCEDURE defarray (
      pkgname     IN   VARCHAR2,
      arrayname   IN   VARCHAR2,
      sch         IN   VARCHAR2 := NULL,
      drvr        IN   VARCHAR2 := NULL
   )
   IS
      v_drvr   PLGadmin.identifier
                         := NVL (UPPER (drvr), test_driver);
      v_pkg    PLGadmin.identifier := pkgname;
   BEGIN
      IF sch IS NOT NULL
      THEN
         v_pkg := sch || '.' || pkgname;
      END IF;

      PLGdoir.set_array (v_drvr, arrayname, v_pkg);
      COMMIT;
   END;

---------------- Generate Text from cgml    

   /* Called by genfile and genstring to consolidate logic. */
   PROCEDURE runcgml (
      obj           IN   VARCHAR2,
      parms         IN   PLGadmin.vc2000_tabtype,
      file          IN   VARCHAR2,
      show          IN   BOOLEAN,
      cleardriver   IN   BOOLEAN,
      sch           IN   VARCHAR2,
      srctyp        IN   INTEGER,
      trgtyp        IN   INTEGER,
      drvr_in       IN   VARCHAR2,
      objrequired   IN   BOOLEAN := TRUE,
      delarray      IN   BOOLEAN := TRUE,
      single_pass   IN   BOOLEAN := FALSE
   )
   IS
      v_drvr   PLGadmin.identifier
                      := NVL (UPPER (drvr_in), test_driver);
      v_sch    PLGadmin.identifier := NVL (sch, USER);
   BEGIN
      /* Force reload of driver every time. */
      PLGgen.reset;
      /* 4/2001 Make sure JUST LIKE driver is set */
      PLGdoir.reset_just_like_drv;

      IF show
      THEN
         PLGgen.display;
      ELSE
         PLGgen.nodisplay;
      END IF;

      IF cleardriver
      THEN
         clear (v_drvr, v_sch, delarray);
      END IF;

      /* Define the driver, based on Table Encapsulator. */

      PLGdoir.defdrv (v_drvr,
         PLGdoir.c_table_dbsrc,
         NULL,
         based_on
      );
      /* Read from and write to specified repositories. */

      PLGdoir.setdrvsrctype (v_drvr,
         PLGdoir.c_global,
         srctyp,
         v_sch
      );
      PLGdoir.setdrvtrgtype (v_drvr,
         PLGdoir.c_global,
         trgtyp,
         v_sch
      );
      PLGdoir.defdrvsrc (v_drvr,
         1,
         file,
         test_driver,
         ftype      => PLGdoir.c_ft_code,
         use_file   => TRUE,
         tab        => PLGdoir.c_global,
         sch        => PLGdoir.c_global
      );
      /* Generate the code. */
      PLGgen.fortab (v_drvr,
         obj,
         parms,
         sch           => v_sch,
         objrequired   => objrequired,
         single_pass   => single_pass
      );
      PLGgen.nodisplay;
      clear (v_drvr, v_sch);
   END;

   PROCEDURE runcgml (
      obj           IN   VARCHAR2,
      file          IN   VARCHAR2,
      show          IN   BOOLEAN,
      cleardriver   IN   BOOLEAN,
      sch           IN   VARCHAR2,
      srctyp        IN   INTEGER,
      trgtyp        IN   INTEGER,
      drvr_in       IN   VARCHAR2,
      objrequired   IN   BOOLEAN := TRUE,
      delarray      IN   BOOLEAN := TRUE,
      single_pass   IN   BOOLEAN := FALSE
   )
   IS
      parms   PLGadmin.vc2000_tabtype;
   BEGIN
      runcgml (obj,
         parms,
         file,
         show,
         cleardriver,
         sch,
         srctyp,
         trgtyp,
         drvr_in,
         objrequired,
         delarray,
         single_pass
      );
   END;

   PROCEDURE loadstring (
      string       IN   VARCHAR2,
      delim        IN   VARCHAR2 := NULL,
      drvr         IN   VARCHAR2 := NULL,
      cleartable   IN   BOOLEAN := TRUE
   )
   IS
      v_drvr    PLGadmin.identifier
                         := NVL (UPPER (drvr), test_driver);
      mytab     PLGadmin.vc2000_tabtype;
      v_row     PLS_INTEGER;
      v_delim   PLGadmin.identifier
                                   := NVL (delim, CHR (10));
   BEGIN
      IF string IS NOT NULL
      THEN
         /* Clear out table. */
         IF cleartable
         THEN
            DELETE
              FROM PLG_driver_source
             WHERE driver = v_drvr;

            v_row := 1;
         ELSE
            BEGIN
               SELECT MAX (line) + 1
                 INTO v_row
                 FROM PLG_driver_source
                WHERE driver = v_drvr;
            EXCEPTION
               WHEN OTHERS
               THEN
                  v_row := 1;
            END;
         END IF;

         /* Load string into database and then process. */
         PLGprs.string (string,
            mytab,
            v_delim,
            PLGprs.c_word
         );

         FOR indx IN mytab.FIRST .. mytab.LAST
         LOOP
            INSERT INTO PLG_driver_source
                        (line, driver, name, seq, text)
                 VALUES (
                    v_row,
                    v_drvr,
                    test_driver,
                    1,
                    mytab (indx)
                 );

            v_row := v_row + 1;
         END LOOP;

         COMMIT;
      END IF;
   END;

   PROCEDURE genfile (
      obj           IN   VARCHAR2,
      file          IN   VARCHAR2,
      show          IN   BOOLEAN := FALSE,
      cleardriver   IN   BOOLEAN := TRUE,
      sch           IN   VARCHAR2 := NULL,
      drvr          IN   VARCHAR2 := NULL,
      delarray      IN   BOOLEAN := TRUE,
      single_pass   IN   BOOLEAN := FALSE
   )
   IS
   BEGIN
      runcgml (obj,
         file,
         show,
         cleardriver,
         sch,
         PLGdoir.c_file,
         PLGdoir.c_file,
         drvr,
         delarray      => delarray,
         single_pass   => single_pass
      );
   END;

   PROCEDURE genfile (
      obj           IN   VARCHAR2,
      parms         IN   PLGadmin.vc2000_tabtype,
      file          IN   VARCHAR2,
      show          IN   BOOLEAN := FALSE,
      cleardriver   IN   BOOLEAN := TRUE,
      sch           IN   VARCHAR2 := NULL,
      drvr          IN   VARCHAR2 := NULL,
      delarray      IN   BOOLEAN := TRUE,
      single_pass   IN   BOOLEAN := FALSE
   )
   IS                -- 4/2001 - Switch to v_drvr from drvr.
      v_drvr   PLGadmin.identifier
                         := NVL (UPPER (drvr), test_driver);
   BEGIN
      runcgml (obj,
         parms,
         file,
         show,
         cleardriver,
         sch,
         PLGdoir.c_file,
         PLGdoir.c_file,
         v_drvr,                                /* drvr, */
         delarray      => delarray,
         single_pass   => single_pass
      );
   END;

   PROCEDURE genfile (
      file          IN   VARCHAR2,
      show          IN   BOOLEAN := FALSE,
      cleardriver   IN   BOOLEAN := TRUE,
      sch           IN   VARCHAR2 := NULL,
      drvr          IN   VARCHAR2 := NULL,
      delarray      IN   BOOLEAN := TRUE,
      single_pass   IN   BOOLEAN := FALSE
   )
   IS                -- 4/2001 - Switch to v_drvr from drvr.
      v_drvr   PLGadmin.identifier
                         := NVL (UPPER (drvr), test_driver);
   BEGIN
      -- 4/2001 - Make sure that JUST LIKE driver is recognized.
      -- ALWAYS reload the driver.
      PLGgen.reset;
      runcgml (NULL,
         file,
         show,
         cleardriver,
         sch,
         PLGdoir.c_file,
         PLGdoir.c_file,
         v_drvr,                                /* drvr, */
         objrequired   => FALSE,
         delarray      => delarray,
         single_pass   => single_pass
      );
   END;

   PROCEDURE genstring (
      obj           IN   VARCHAR2,
      string        IN   VARCHAR2,
      show          IN   BOOLEAN := FALSE,
      cleardriver   IN   BOOLEAN := TRUE,
      sch           IN   VARCHAR2 := NULL,
      delim         IN   VARCHAR2 := NULL,
      drvr          IN   VARCHAR2 := NULL,
      delarray      IN   BOOLEAN := TRUE,
      single_pass   IN   BOOLEAN := FALSE
   )
   IS
      v_drvr    PLGadmin.identifier
                         := NVL (UPPER (drvr), test_driver);
      mytab     PLGadmin.vc2000_tabtype;
      v_row     PLS_INTEGER             := 1;
      v_delim   PLGadmin.identifier
                                   := NVL (delim, CHR (10));
   BEGIN
      loadstring (string, delim, v_drvr);
      runcgml (obj,
         'ALREADY LOADED',
         show,
         cleardriver,
         sch,
         PLGdoir.c_dbtab,
         PLGdoir.c_list,
         v_drvr,
         delarray      => delarray,
         single_pass   => single_pass
      );
   END;

   PROCEDURE genstring (
      string        IN   VARCHAR2,
      show          IN   BOOLEAN := FALSE,
      cleardriver   IN   BOOLEAN := TRUE,
      sch           IN   VARCHAR2 := NULL,
      delim         IN   VARCHAR2 := NULL,
      drvr          IN   VARCHAR2 := NULL,
      delarray      IN   BOOLEAN := TRUE,
      single_pass   IN   BOOLEAN := FALSE
   )
   IS
      v_drvr    PLGadmin.identifier
                         := NVL (UPPER (drvr), test_driver);
      mytab     PLGadmin.vc2000_tabtype;
      v_row     PLS_INTEGER             := 1;
      v_delim   PLGadmin.identifier
                                   := NVL (delim, CHR (10));
   BEGIN
      loadstring (string, delim, v_drvr);
      runcgml (NULL,
         'ALREADY LOADED',
         show,
         cleardriver,
         sch,
         PLGdoir.c_dbtab,
         PLGdoir.c_list,
         v_drvr,
         objrequired   => FALSE,
         delarray      => delarray,
         single_pass   => single_pass
      );
   END;

   PROCEDURE genstring (
      obj             IN       VARCHAR2,
      string1_inout   IN OUT   VARCHAR2,
      string2_inout   IN OUT   VARCHAR2,
      string3_inout   IN OUT   VARCHAR2,
      string4_inout   IN OUT   VARCHAR2,
      string5_inout   IN OUT   VARCHAR2,
      show            IN       BOOLEAN := FALSE,
      sch             IN       VARCHAR2 := NULL,
      delim           IN       VARCHAR2 := NULL,
      drvr            IN       VARCHAR2 := NULL,
      delarray        IN       BOOLEAN := TRUE,
      single_pass     IN       BOOLEAN := FALSE,
      objrequired     IN       BOOLEAN := TRUE,
      maxlen          IN       PLS_INTEGER := NULL
   )
   /*
   Designed for GenX, or a GUI front end...it populates a list
   and passes that through, does not use the database, does not
   create a separate driver.
   */
   IS
      v_drvr     PLGadmin.identifier
                        := NVL (UPPER (drvr), PLGte.driver);
      mytab      PLGadmin.vc2000_tabtype;
      v_row      PLS_INTEGER             := 1;
      v_delim    PLGadmin.identifier
                                   := NVL (delim, CHR (10));
      onstring   PLS_INTEGER             := 1;
      l_next     VARCHAR2 (32767);
      l_string   VARCHAR2 (32767);

      PROCEDURE loadstring (str IN VARCHAR2)
      IS
      BEGIN
         IF str IS NOT NULL
         THEN
            PLGprs.string1 (str, mytab, v_delim);
         END IF;
      END;
   BEGIN
      loadstring (string1_inout);
      loadstring (string2_inout);
      loadstring (string3_inout);
      loadstring (string4_inout);
      loadstring (string5_inout);

      IF show
      THEN
         PLGgen.display;
      ELSE
         PLGgen.nodisplay;
      END IF;

      /* Generate the code. */

      PLGgen.fromlist (v_drvr,
         obj,
         list          => mytab,
         sch           => sch,
         objrequired   => objrequired,
         single_pass   => single_pass
      );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -