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

📄 plgcols.spb

📁 Oracle PL/SQL procedure generator (second generator type)
💻 SPB
字号:
CREATE OR REPLACE PACKAGE BODY PLGcols
IS

/*----------------------------------------------------------------
||                  PL/Vision Professional 
||----------------------------------------------------------------
||    File: PLGcols.spb
||  Author: Steven Feuerstein
||
|| This is a part of the PL/Vision Professional Code library.
|| Copyright (C) 1996-99 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
||
-----------------------------------------------------------------*/
   c_pkg CONSTANT PLGadmin.identifier := 'PLGcols';

   g_dbg BOOLEAN := FALSE;
   
   CURSOR info_cur (sch_in IN VARCHAR2, tab_in IN VARCHAR2)
   IS
      SELECT t.column_id, 
             t.column_name, 
             data_type, 
             data_length, 
             data_precision,
             data_type || ' ' ||
             DECODE(data_type, 
                'NUMBER', DECODE(data_precision, NULL, NULL,
                    '('||DECODE(data_scale, 0, TO_CHAR(data_precision),
                       data_precision||','||data_scale) ||')'),
                'VARCHAR', '('||data_length||')',
                'VARCHAR2', '('||data_length||')',
                'CHAR', '('||data_length||')',
                'RAW', '('||data_length||')',
                NULL) data_declaration,
             nullable, 
             default_length, 
             data_default,
             comments,
             NULL, 
             NULL, 
             NULL, 
             NULL

        FROM /* dba_ */ ALL_TAB_COLUMNS T, /* dba_ */ ALL_COL_COMMENTS C

       WHERE T.OWNER = UPPER (sch_in) 
         AND T.TABLE_NAME = tab_in /* 99.2.8 don't change case UPPER (tab_in) */
         AND T.OWNER = C.OWNER
         AND T.TABLE_NAME = C.TABLE_NAME
         AND T.COLUMN_NAME = C.COLUMN_NAME

       ORDER BY COLUMN_ID;

   FUNCTION fortab (tab IN VARCHAR2, sch IN VARCHAR2 := NULL,
      getkeys IN BOOLEAN := FALSE)
      RETURN col_tabtype
   IS
      v_tab PLGadmin.identifier := tab;
      spec PLGobj.spec_type;
      info_rec col_rectype;
      retval col_tabtype;
      
      PROCEDURE load_info IS
      BEGIN
         /* Try both regular case and upper case */
         OPEN info_cur (spec.owner, spec.name);      
         FETCH info_cur INTO info_rec;
         IF info_cur%NOTFOUND
         THEN
            CLOSE info_cur;
            OPEN info_cur (spec.owner, UPPER (spec.name));
            FETCH info_cur INTO info_rec;
         END IF;
         
         WHILE info_cur%FOUND
         LOOP
            retval (NVL (retval.LAST, 0) + 1) := info_rec;         
            FETCH info_cur INTO info_rec;
         END LOOP;
         CLOSE info_cur;      
      END;
   BEGIN

      IF INSTR (v_tab, '.') = 0 AND sch IS NOT NULL
      THEN
         v_tab := sch || '.' || v_tab;
      END IF; 

      spec := PLGobj.convspec (v_tab, resolve_synonym => TRUE);

      load_info;
      
      IF getkeys AND retval.COUNT > 0
      THEN
         DECLARE
            pkys PLGpky.pky_tabtype;
            cr PLS_INTEGER;
         BEGIN
            /* Get PK information */
            pkys := PLGpky.fortab (tab, sch);
            IF pkys.COUNT > 0
            THEN
               FOR rowind IN pkys.FIRST .. pkys.LAST
               LOOP     
                  cr := retval.FIRST;
                  LOOP
                     IF retval(cr).column_name = pkys(rowind).column_name
                     THEN
                        retval(cr).constraint_name := pkys(rowind).constraint_name;
                        retval(cr).constraint_type := pkys(rowind).constraint_type;
                        retval(cr).pky_position := pkys(rowind).position;
                     END IF;
                     cr := cr + 1;
                     EXIT WHEN cr > retval.LAST;
                  END LOOP;
               END LOOP;
            END IF;
         END;
      END IF;
      
      RETURN retval; 
   END;

   PROCEDURE setcomment (colrec_inout IN OUT col_rectype, 
      comment_in IN ALL_COL_COMMENTS.COMMENTS%TYPE)
   IS
   BEGIN
      colrec_inout.comments := comment_in;
   END;

   FUNCTION ispky (coltab IN col_tabtype, colrow IN PLS_INTEGER) RETURN BOOLEAN
   IS
   BEGIN
      RETURN NVL (coltab(colrow).constraint_type = 'P', FALSE);
   END;

   FUNCTION iscolumn (tab IN VARCHAR2, col IN VARCHAR2, sch IN VARCHAR2 := NULL)
      RETURN BOOLEAN
   IS
      /* 99.2 "col" handling */
      v_col /* dba_ */ ALL_TAB_COLUMNS.COLUMN_NAME%TYPE;
      
      CURSOR info_cur (col VARCHAR2)
      IS
         SELECT 'x'
           FROM /* dba_ */ ALL_TAB_COLUMNS
          WHERE OWNER = UPPER (NVL (sch, USER)) 
            AND TABLE_NAME = UPPER (tab)
            AND COLUMN_NAME = col;
      info_rec info_cur%ROWTYPE;
      retval BOOLEAN;
   BEGIN
      IF SUBSTR (col, 1, 1) = '"'
      THEN
         v_col := TRANSLATE (col, 'A"', 'A');
      ELSE
         v_col := UPPER (col);
      END IF;
      
      OPEN info_cur (v_col);
      
      FETCH info_cur INTO info_rec;
      retval := info_cur%FOUND;
      CLOSE info_cur;
      RETURN retval;
   END;

END PLGcols;                      
/
rem show errors

⌨️ 快捷键说明

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