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

📄 tmr81.ot

📁 OReilly Oracle PL SQL Programming第4版源代码
💻 OT
字号:
DROP TYPE tmr_t FORCE;

CREATE TYPE tmr_t AS OBJECT (
   startTime INTEGER,
   endTime INTEGER,
   repetitions INTEGER,
   name VARCHAR2(2000),   
   MEMBER PROCEDURE go ,
   MEMBER PROCEDURE stop (show_timing IN BOOLEAN := TRUE),   
   MEMBER FUNCTION timing RETURN INTEGER,
   MEMBER FUNCTION timing_desc  RETURN VARCHAR2,  
   MEMBER PROCEDURE reset (name IN VARCHAR2 := NULL),    
   STATIC FUNCTION make (
      name IN VARCHAR2,
      repetitions IN INTEGER := 1
      )
      RETURN tmr_t 
);
/

CREATE OR REPLACE TYPE BODY tmr_t 
AS
   STATIC FUNCTION make (
      name IN VARCHAR2,
      repetitions IN INTEGER := 1
      )
      RETURN tmr_t
   IS
   BEGIN
      RETURN tmr_t (NULL, NULL, NVL (repetitions, 1), name);
   END;
      
   MEMBER PROCEDURE go IS
   BEGIN
      IF startTime IS NOT NULL
      THEN
         DBMS_OUTPUT.PUT_LINE (
            'You have already started timer "' || name || '"');
      ELSE
         startTime := DBMS_UTILITY.GET_TIME;
      END IF;
   END;
   
   MEMBER PROCEDURE stop  (show_timing IN BOOLEAN := TRUE)
   IS
   BEGIN
      IF endTime IS NOT NULL
      THEN
         DBMS_OUTPUT.PUT_LINE (
            'You have already stopped timer "' || name || '"');
      ELSE
         endTime := DBMS_UTILITY.GET_TIME;
         
         IF show_timing
         THEN
            DBMS_OUTPUT.PUT_LINE (timing_desc);
         END IF;
      END IF;
   END;
   
   MEMBER PROCEDURE reset  (name IN VARCHAR2 := NULL)IS
   BEGIN
      startTime := NULL;
      endTime := NULL;
      IF name IS NOT NULL
      THEN
         SELF.name := name;
      END IF;
   END;
   
   MEMBER FUNCTION timing RETURN INTEGER
   IS
   BEGIN
      IF endTime IS NULL
      THEN
         DBMS_OUTPUT.PUT_LINE (
            'You must stop timer "' || name || '"' ||
            ' before you can get timing information.');
      END IF;
      
      -- Avoid "epoch time" wrap around (thanks, Solomon Yakobson)
      -- RETURN endTime - startTime; 
      RETURN (
         MOD (endTime - startTime + POWER(2,32), POWER(2,32)));
   END;

   MEMBER FUNCTION timing_desc RETURN VARCHAR2
   IS
      retval VARCHAR2(2000);
   BEGIN
      IF endTime IS NULL
      THEN
         DBMS_OUTPUT.PUT_LINE (
            'You must stop timer "' || name || '"' ||
            ' before you can get timing information.');
      END IF;
      
      retval :=
         'Elapsed time for "' || name || '" = ' ||
         TO_CHAR (timing / 100) || ' seconds.';
         
      IF NVL (repetitions, 1) > 1 
      THEN
         retval := retval ||
            ' Per repetition timing = ' || 
            TO_CHAR ((timing / 100) / repetitions) || ' seconds.';
      END IF; 
      
      RETURN retval;
   END;
END;
/



/*======================================================================
| Supplement to the third edition of Oracle PL/SQL Programming by Steven
| Feuerstein with Bill Pribyl, Copyright (c) 1997-2002 O'Reilly &
| Associates, Inc. To submit corrections or find more code samples visit
| http://www.oreilly.com/catalog/oraclep3/
*/

⌨️ 快捷键说明

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