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

📄 plgplsql.spb

📁 Oracle PL/SQL procedure generator (second generator type)
💻 SPB
📖 第 1 页 / 共 3 页
字号:
         'PLGplsql.convtype([objname],' ||
         'PLGdesc.g_datatype_names(PLGgen.argsep([\currrow]).datatype))');

      PLGdoir.setdynvarchar2 (driver, 'ORIG_DATATYPE_NAME',
         'PLGdesc.g_datatype_names(PLGgen.argsep([\currrow]).datatype)');

      PLGdoir.setdynvarchar2 (driver, 'COMPOSITE_TYPE',
         'PLGplsql.composite(' ||
         '   [objname],' ||
         '   [progsep.progname],' ||
         '   PLGgen.arg([\currrow]).overload,' ||
         '   PLGgen.arg([\currrow]).argument_name,' ||
         '   [schema])');

      PLGdoir.setdynboolean (driver, 'IS_RECORD',
         'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_record');

      PLGdoir.setdynboolean (driver, 'IS_INDEXBY_TABLE',
         'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_indexby_table');

      PLGdoir.setdynboolean (driver, 'IS_REF_CURSOR',
         'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_ref_cursor');

      PLGdoir.setdynboolean (driver, 'IS_OBJECT',
         'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_rec_object_typecord');

      PLGdoir.setdynboolean (driver, 'IS_NESTED_TABLE',
         'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_nested_table');

      PLGdoir.setdynboolean (driver, 'IS_VARRAY',
         'PLGgen.[\arrayname]([\currrow]).datatype = PLGdesc.c_varray');

      PLGdoir.setdynvarchar2 (driver, 'ITEMDELIM',
         'PLGplsql.ibtab_itemdelim(' ||
         '   [objname],' ||
         '   [progsep.progname],' ||
         '   PLGgen.arg([\currrow]).overload,' ||
         '   PLGgen.arg([\currrow]).argument_name,' ||
         '   [schema])');

      PLGdoir.setdynvarchar2 (driver, 'SEGDELIM',
         'PLGplsql.ibtab_segdelim(' ||
         '   [objname],' ||
         '   [progsep.progname],' ||
         '   PLGgen.arg([\currrow]).overload,' ||
         '   PLGgen.arg([\currrow]).argument_name,' ||
         '   [schema])');

   END;

   PROCEDURE setlookups
   IS
   BEGIN
      /* IS NULL error checking - Can override for your table or schema. */
      PLGdoir.setlookup (
         driver,
         PLGdoir.c_global,
         PLGdoir.c_raise,
         PLGdoir.c_global,
         'ISNULL',
         -20000,
         'Value of [colname] cannot be NULL.',
         PLGdoir.c_global
         );

   END;

   PROCEDURE setaliases
   /* The pre-set aliases */
   IS
   BEGIN
      /* File extensions */
      PLGdoir.set_global_alias (driver, 'pkgbodyext', 'pkb',
      'Package body file extension');

      /* Target Names */
      PLGdoir.set_global_alias (driver, 'saprogs', '{saprefix}[objname].{saext}',
         'Stand-alone programs file');

      PLGdoir.set_ident (driver, 'divider', '_', 'Identifier name divider');

      /* Shorthand */
      PLGdoir.set_global_alias (driver, 'pkycoltype', '[objname].{[pkycolname]}%TYPE',
         'Primary key %TYPE declaration');

      /* Test Elements */
      PLGdoir.set_global_alias (driver, 'displaymech', 'DBMS_OUTPUT.PUT_LINE',
         'Display mechanism');

      PLGdoir.set_global_alias (driver, 'maxtestrows', '5',
         'Row count limit in test scripts');
   END;

   PROCEDURE initialize
   IS
   BEGIN
      /* Set flag to make sure all inserts are "foundations" for the driver. */
      PLGdoir.drvfoundation;

      /* Clean out all global entries related to this driver */
      PLGdoir.delfoundation (driver);
      
      /* Use cleaner approach
      PLGdoir.del (
         drv => driver,
         tab => '%',
         otype => '%',
         itype => '%',
         seq => NULL,
         sch => PLGdoir.c_global);
      */

      PLGdoir.defdrv (driver, PLGdoir.c_plsql_dbsrc, 'PL/SQL Code Encapsulator');

      setfiles;

      setidentifiers;

      setaliases;

      setsrc;

      setlookups;

      /* Default exception handling: PL/SQL */
      PLGdoir.setpsexc (
         drv => driver,
         tab => PLGdoir.c_global,
         sch => PLGdoir.c_global);

      /* Do NOT use PLVxmn for tracing */
      PLGdoir.nousexmn (
         drv => driver,
         tab => PLGdoir.c_global,
         sch => PLGdoir.c_global);

      /* Do NOT use cursor variables by default */
      PLGdoir.nosetcurvar (
         drv => driver,
         tab => PLGdoir.c_global,
         sch => PLGdoir.c_global);

      /* Do NOT create stand-alone programs by default */
      PLGdoir.nosetsaprogs (
         drv => driver,
         tab => PLGdoir.c_global,
         sch => PLGdoir.c_global);

      /* Do NOT create row count functions by default */
      PLGdoir.setcountrows (
         drv => driver,
         tab => PLGdoir.c_global,
         sch => PLGdoir.c_global);

      /* Make sure that incremental loading is disabled globally. */
      PLGdoir.setloadnone (
         drv => driver,
         tab => PLGdoir.c_global,
         sch => PLGdoir.c_global);

      /* Minimum set of cursors. */
      PLGdoir.setcurinfo (
         driver,
         PLGdoir.c_global,
         'all',
         '*',
         PLGdoir.c_global
         );

      PLGdoir.nodrvfoundation;      
   END;

   PROCEDURE analyze_code (
      progname IN VARCHAR2,
      prog_out IN OUT PLGdesc.prog_tt,
      arglist_out IN OUT PLGdesc.arglist_tt,
      retarglist_out IN OUT PLGdesc.arglist_tt,
      sch IN VARCHAR2 := NULL
      )
   IS
      /* Variables to hold components of the name for NAME_RESOLVE. */
      v_sch PLGadmin.identifier;
      part1 PLGadmin.identifier;
      part2 PLGadmin.identifier;
      dblink PLGadmin.identifier;
      part1_type NUMBER;
      object_number NUMBER;
      procedure_type CONSTANT INTEGER := 7;
      function_type CONSTANT INTEGER := 8;
      package_type CONSTANT INTEGER := 9;

      v_prog PLGadmin.identifier :=
         PLGadmin.ifelse (sch IS NULL, progname, sch || '.' || progname);

   BEGIN
      prog_out.DELETE;
      arglist_out.DELETE;
      retarglist_out.DELETE;
      --progsep_out.DELETE;
      --argseplist_out.DELETE;

      DBMS_UTILITY.NAME_RESOLVE (
         v_prog,
         1,
         v_sch,
         part1,
         part2,
         dblink,
         part1_type,
         object_number
      );

      /* Retrieve all program and argument information. */
      PLGdesc.get_prog_info (
         v_sch, part1, part2, prog_out, arglist_out, retarglist_out);
      
      /* OLD APPROACH
      -- Obtain top-level info about all programs 
      
      PLGdesc.progs (v_sch, part1, part2, prog_out);

      -- Extract argument information for each program identified.

      PLGdesc.obtain_args (
         v_sch, part1, part2, prog_out, arglist_out);

      -- Separate out information for overloaded programs. 
      */
      
      /*PLGdesc.separate_progs_and_args (
         prog_out,
         arglist_out,
         progsep_out,
         argseplist_out
         );

      -- Now filter out composite data structures from the separated arg list.
      -- Also move function return information to separate area in this step. 

      PLGdesc.filter_arguments (
         prog_out,
         arglist_out,
         progsep_out,
         argseplist_out
         );
      */
   END analyze_code;

   PROCEDURE use_composites
      (prog IN VARCHAR2,
       sch IN VARCHAR2 := NULL)
   IS
   BEGIN
      PLGdoir.setactive (driver, prog, 'use_composites', sch);
   END;

   PROCEDURE nouse_composites
      (prog IN VARCHAR2,
       sch IN VARCHAR2 := NULL)
   IS
   BEGIN
      PLGdoir.setinactive (driver, prog, 'use_composites', sch);
   END;

   FUNCTION using_composites
      (prog IN VARCHAR2,
       sch IN VARCHAR2 := NULL)
       RETURN BOOLEAN
   IS
   BEGIN
      RETURN PLGdoir.isactive (driver, prog, 'use_composites', sch => sch);
   END;

   PROCEDURE set_composite
      (prog IN VARCHAR2,
       argname IN VARCHAR2,
       compname IN VARCHAR2,
       sch IN VARCHAR2 := NULL)
   IS
   BEGIN
      PLGdoir.ins (driver,
         sch, prog, PLGdoir.c_table, argname,
         PLGdoir.c_column, c_composite,
         0, /* No overloading */
         compname);
   END;

⌨️ 快捷键说明

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