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

📄 p.pkb

📁 OReilly Oracle PL SQL Programming第4版源代码
💻 PKB
字号:
CREATE OR REPLACE PACKAGE BODY p
IS
/*----------------------------------------------------------------
||                  PL/Vision Professional
||----------------------------------------------------------------
||    File: p.spb
||  Author: Steven Feuerstein
||
||
|| Copyright (C) 1996-2002 Quest Software
|| All rights reserved.
||
-----------------------------------------------------------------*/
   c_pkg CONSTANT CHAR (1) := 'p';
   c_max_dopl_line INTEGER := 255;
   c_delim CONSTANT CHAR (3) := ' - ';
   /* Flag that determines whether output should be displayed. */
   v_show BOOLEAN := TRUE;
   g_showtime BOOLEAN := FALSE;
   g_lasttime INTEGER := NULL;
   /* Private Variable for "linesep" */
   v_linesep VARCHAR2 (100) := NULL;
   /* Private Variable for "prefix" */
   v_prefix VARCHAR2 (100) := c_prefix;
   v_prefix_len INTEGER := 1;
   v_linelen INTEGER := c_linelen;

   /*------------------- Private Modules -------------------*/
   PROCEDURE put_line (stg_in IN VARCHAR2)
   IS
   BEGIN
      DBMS_OUTPUT.put_line (v_prefix || stg_in);
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.ENABLE (1000000);
         DBMS_OUTPUT.put_line (v_prefix || stg_in);
   END;

   PROCEDURE display_line (show_in IN BOOLEAN, line_in IN VARCHAR2)
   IS
   BEGIN
      IF v_show OR show_in
      THEN
         IF RTRIM (line_in) IS NULL
         THEN
            put_line ('');
         ELSIF LTRIM (RTRIM (line_in)) = v_linesep
         THEN
            put_line ('');
         ELSIF LENGTH (line_in) > linelen
         THEN
            put_line (SUBSTR (line_in, 1, linelen));
            display_line (show_in
                        , SUBSTR (line_in, linelen + 1));
         ELSE
            put_line (line_in);
         END IF;
      END IF;
   END;

   /*--------------- Toggle Output Modules ---------------*/
   PROCEDURE turn_on
   IS
   BEGIN
      v_show := TRUE;
      DBMS_OUTPUT.ENABLE (1000000);
   END;

   PROCEDURE turn_off
   IS
   BEGIN
      v_show := FALSE;
   END;

   /* Body of Set for "linesep" */
   PROCEDURE set_linesep (linesep_in IN VARCHAR2)
   IS
   BEGIN
      v_linesep := linesep_in;
   END set_linesep;

   /* Body of Get for "linesep" */
   FUNCTION linesep
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN v_linesep;
   END;

   /* Body of Set for "prefix" */
   PROCEDURE set_prefix (prefix_in IN VARCHAR2 := c_prefix)
   IS
   BEGIN
      v_prefix := prefix_in;
      v_prefix_len := LENGTH (prefix_in);
   END set_prefix;

   /* Body of Get for "prefix" */
   FUNCTION prefix
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN v_prefix;
   END prefix;

   /* Set line length before wrap */
   PROCEDURE set_linelen (len IN INTEGER := c_linelen)
   IS
   BEGIN
      v_linelen :=
         LEAST (c_max_dopl_line
              , GREATEST (NVL (len, c_linelen), 1)
               );
   END;

   FUNCTION linelen
      RETURN INTEGER
   IS
   BEGIN
      RETURN v_linelen;
   END;

   /*------------------ The p.l Procedures ----------------*/
   FUNCTION date_string (dt IN DATE, MASK IN VARCHAR2 := NULL)
      RETURN VARCHAR2
   IS
   BEGIN
      IF MASK IS NOT NULL
      THEN
         RETURN TO_CHAR (dt, MASK);
      ELSE
         RETURN TO_CHAR (dt);
      END IF;
   END;

   FUNCTION bool_string (val IN boolean)
      RETURN VARCHAR2
   IS
   BEGIN
      IF val
      THEN
         RETURN 'TRUE';
      ELSIF NOT val
      THEN
         RETURN 'FALSE';
      ELSE
         RETURN 'NULL';
      END IF;
   END;

   PROCEDURE l (
      dt IN DATE
    , mask_in IN VARCHAR2 := NULL
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in, date_string (dt, mask_in));
   END;

   PROCEDURE l (num IN NUMBER, show_in IN BOOLEAN := FALSE)
   IS
   BEGIN
      display_line (show_in, TO_CHAR (num));
   END;

   PROCEDURE l (stg IN VARCHAR2, show_in IN BOOLEAN := FALSE)
   IS
   BEGIN
      display_line (show_in, stg);
   END;

   PROCEDURE l (
      stg IN VARCHAR2
    , num IN NUMBER
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in, stg || c_delim || TO_CHAR (num));
   END;

   PROCEDURE l (
      stg IN VARCHAR2
    , dt IN DATE
    , mask_in IN VARCHAR2 := NULL
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  , stg || c_delim || date_string (dt, mask_in)
                   );
   END;

   PROCEDURE l (bool IN BOOLEAN, show_in IN BOOLEAN := FALSE)
   IS
   BEGIN
      display_line (show_in, bool_string (bool));
   END;

   PROCEDURE l (
      stg IN VARCHAR2
    , bool IN BOOLEAN
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  , stg || c_delim || bool_string (bool)
                   );
   END;

   PROCEDURE l (
      file_in IN UTL_FILE.file_type
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in, TO_CHAR (file_in.ID));
   END;

   PROCEDURE l (
      string_in IN VARCHAR2
    , file_in IN UTL_FILE.file_type
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      l (string_in, file_in.ID, show_in);
   END;

   /* Additional overloadings */
   PROCEDURE l (
      num1 IN NUMBER
    , num2 IN NUMBER
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  , TO_CHAR (num1) || c_delim || TO_CHAR (num2)
                   );
   END;

   PROCEDURE l (
      str IN VARCHAR2
    , num1 IN NUMBER
    , num2 IN NUMBER
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  ,    str
                    || c_delim
                    || TO_CHAR (num1)
                    || c_delim
                    || TO_CHAR (num2)
                   );
   END;

   PROCEDURE l (
      bool1 IN BOOLEAN
    , bool2 IN BOOLEAN
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  ,    bool_string (bool1)
                    || c_delim
                    || bool_string (bool2)
                   );
   END;

   PROCEDURE l (
      stg1 IN VARCHAR2
    , stg2 IN VARCHAR2
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in, stg1 || c_delim || stg2);
   END;

   PROCEDURE l (
      dt1 IN DATE
    , dt2 IN DATE
    , mask_in IN VARCHAR2 := NULL
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  ,    date_string (dt1, mask_in)
                    || c_delim
                    || date_string (dt2, mask_in)
                   );
   END;

   PROCEDURE l (
      num IN NUMBER
    , dt IN DATE
    , mask_in IN VARCHAR2 := NULL
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  ,    TO_CHAR (num)
                    || c_delim
                    || date_string (dt, mask_in)
                   );
   END;

   PROCEDURE l (
      bool IN BOOLEAN
    , num IN NUMBER
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  , bool_string (bool) || c_delim
                    || TO_CHAR (num)
                   );
   END;

   PROCEDURE l (
      bool IN BOOLEAN
    , dt IN DATE
    , mask_in IN VARCHAR2 := NULL
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  ,    bool_string (bool)
                    || c_delim
                    || date_string (dt, mask_in)
                   );
   END;

   PROCEDURE l (
      bool IN BOOLEAN
    , stg IN VARCHAR2
    , show_in IN BOOLEAN := FALSE
   )
   IS
   BEGIN
      display_line (show_in
                  , stg || c_delim || bool_string (bool)
                   );
   END;

   PROCEDURE HELP (topic_in IN VARCHAR2 := NULL)
   IS
   BEGIN
      p.l
         ('PLVhlp disabled; please check Knowledge Xpert for current documentation.'
         );               /* PLVhlp.plvshow (c_pkg, topic_in); */
   END;

   /* Show time stamp toggle. Default is NOSHOW. */
   PROCEDURE showtime
   IS
   BEGIN
      g_showtime := TRUE;
      g_lasttime := NULL;
   END;

   PROCEDURE noshowtime
   IS
   BEGIN
      g_showtime := TRUE;
      g_lasttime := NULL;
   END;

   FUNCTION showing_time
      RETURN BOOLEAN
   IS
   BEGIN
      RETURN g_showtime;
   END;
END p;
/

⌨️ 快捷键说明

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