暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Super Simple Execution Tracing Package

原创 fizz 2022-11-11
189
  • Statement1

    CREATE TABLE trace_config
    (
       send_to    VARCHAR2 (1),
       trace_on   VARCHAR2 (1)
    )

    Table created.

  • Statement2

    INSERT INTO trace_config (send_to, trace_on)
         VALUES ('T', 'N')

    1 row(s) inserted.

  • Statement3

    COMMIT

    Statement processed.

  • Statement4

    CREATE TABLE trace_table
    (
       message      VARCHAR2 (4000),
       callstack    CLOB,
       created_by   VARCHAR2 (30),
       created_at   DATE
    )

    Table created.

  • Statement5

    CREATE OR REPLACE PACKAGE trace_mgr
    IS
       PROCEDURE to_screen;
    
       PROCEDURE to_table;
    
       PROCEDURE turn_on;
    
       PROCEDURE turn_off;
    
       FUNCTION sending_to_screen
          RETURN BOOLEAN;
    
       FUNCTION trace_is_on
          RETURN BOOLEAN;
    
       PROCEDURE put (msg_in IN VARCHAR2);
    
       PROCEDURE put (boolean_in IN BOOLEAN);
    END;

    Package created.

  • Statement6

    CREATE OR REPLACE PACKAGE BODY trace_mgr 
    IS 
       PROCEDURE to_screen 
       IS 
          PRAGMA AUTONOMOUS_TRANSACTION; 
       BEGIN 
          UPDATE trace_config SET send_to = 'S'; 
          COMMIT; 
       END; 
     
       PROCEDURE to_table 
       IS 
          PRAGMA AUTONOMOUS_TRANSACTION; 
       BEGIN 
          UPDATE trace_config SET send_to = 'T'; 
          COMMIT; 
       END; 
     
       PROCEDURE turn_on 
       IS 
          PRAGMA AUTONOMOUS_TRANSACTION; 
       BEGIN 
          UPDATE trace_config  SET trace_on = 'Y'; 
          COMMIT; 
       END; 
     
       PROCEDURE turn_off 
       IS 
          PRAGMA AUTONOMOUS_TRANSACTION; 
       BEGIN 
          UPDATE trace_config SET trace_on = 'N'; 
          COMMIT; 
       END; 
     
       FUNCTION trace_is_on 
          RETURN BOOLEAN 
       IS 
          l_trace   trace_config.trace_on%TYPE; 
       BEGIN 
          SELECT trace_on INTO l_trace FROM trace_config; 
          RETURN l_trace = 'Y'; 
       END; 
     
       FUNCTION sending_to_screen 
          RETURN BOOLEAN 
       IS 
          l_send_to   trace_config.send_to%TYPE; 
       BEGIN 
          SELECT send_to INTO l_send_to FROM trace_config; 
          RETURN l_send_to = 'S'; 
       END; 
     
       PROCEDURE put (msg_in IN VARCHAR2) 
       IS 
          FUNCTION fullmsg 
             RETURN VARCHAR2 
          IS 
          BEGIN 
             RETURN    ' At: ' 
                    || TO_CHAR (SYSDATE, 'YYYY-MON-DD HH24:MI:SS') 
                    || ' Msg: ' 
                    || msg_in; 
          END; 
       BEGIN 
          IF trace_is_on 
          THEN 
             IF sending_to_screen 
             THEN 
                DBMS_OUTPUT.put_line (fullmsg); 
             ELSE 
                INSERT INTO trace_table (MESSAGE, 
                                         callstack, 
                                         created_by, 
                                         created_at) 
                     VALUES (msg_in, 
                             DBMS_UTILITY.format_call_stack, 
                             USER, 
                             SYSDATE); 
             END IF; 
          END IF; 
       END; 
     
       PROCEDURE put (boolean_in IN BOOLEAN) 
       IS 
       BEGIN 
          DBMS_OUTPUT.put_line ( 
             CASE boolean_in 
                WHEN TRUE THEN 'TRUE' 
                WHEN FALSE THEN 'FALSE' 
                ELSE 'NULL' 
             END); 
       END; 
    END; 

    Package Body created.

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论