Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

What is wrong with this trigger code?

662763Dec 30 2008 — edited Jan 6 2009
Hi folks,

Just wondering whether I might be missing something here about Oracle 9i, that one of you might notice, either from the syntax perspective, or regarding a bug? The code below compiles in the database I have, but the trigger does not fire, and no data is being inserted into the tables. The trigger is owned by sys, and the insert statements are in dynamic sql because I don't want the trigger not to compile if ever the tables are deleted from the b1dev schema.

Incidentally, this same trigger works well on Oracle 10.2.1.0 and Oracle 11.1.0. Any feedback would be much appreciated.
CREATE OR REPLACE TRIGGER cc_LogOff_Trig
    BEFORE LogOff ON DATABASE
    DECLARE
       LogOff_sid   PLS_INTEGER;
       LogOff_Time  DATE := SYSDATE;
       Table_1      VARCHAR2(30) := 'CC_SESSION_EVENT_HISTORY';
       Table_2      VARCHAR2(30) := 'CC_SESSTAT_HISTORY';
       Table_Count  NUMBER;
       v_sql1       VARCHAR2(4000);
       v_sql2       VARCHAR2(4000);
    BEGIN
      SELECT sId
      INTO   LogOff_sId
      FROM   sys.v$MysTat
      WHERE  ROWNUM < 2;
      
      SELECT COUNT(* )
      INTO   Table_Count
      FROM   dba_Objects
      WHERE  Object_Name = Table_1
             AND Object_Type = 'TABLE';
      
      IF Table_Count = 1 THEN
        v_sql1 := 'INSERT INTO bdev.cc_session_event_history(sid,   serial#,   username,   osuser,   session_process_addr,   os_client_process_id,   logon_time,   type,   event,    total_waits,   total_timeouts,   time_waited_csecs,   
  average_wait_csecs,   max_wait_csecs,    logoff_timestamp) SELECT se.sid, s.serial#, s.username, s.osuser, s.paddr, s.process, s.logon_time, s.type, se.event, se.total_waits, se.total_timeouts, se.time_waited, se.average_wait, 
  se.max_wait, '''
                  ||LogOff_Time
                  ||''' FROM sys.v$session_event se, sys.v$session s WHERE se.sid = s.sid AND s.username = '''
                  ||LogIn_User
                  ||''' AND s.sid = '
                  ||LogOff_sId;
        
        EXECUTE IMMEDIATE v_sql1;
      END IF;
      
      SELECT COUNT(* )
      INTO   Table_Count
      FROM   dba_Objects
      WHERE  Object_Name = Table_2
             AND Object_Type = 'TABLE';
      
      IF Table_Count = 1 THEN
        v_sql2 := 'INSERT INTO bdev.cc_sesstat_history(username,     osuser,   sid,   serial#,   session_process_addr,   os_client_process_id,   logon_time,   statistic#,   name,   VALUE,   logoff_timestamp)   SELECT s.username,    
  s.osuser,      ss.sid,     s.serial#,     s.paddr,     s.process,     s.logon_time,     ss.statistic#,     sn.name,     ss.VALUE,     '''
                  ||LogOff_Time
                  ||'''   FROM sys.v$sesstat ss,     sys.v$statname sn,     sys.v$session s  
  WHERE ss.statistic# = sn.statistic#    AND ss.sid = s.sid    AND sn.name IN(''CPU used when call started'',   ''CPU used by this session'',   ''recursive cpu usage'',   ''parse time cpu'')    
  AND s.username = '''
                  ||Login_User
                  ||''' AND s.sid = '
                  ||LogOff_sId;
        
        EXECUTE IMMEDIATE v_sql2;
      END IF;
      
      COMMIT;
    END;
desc cc_session_event_history;
Name                           Null     Type                                                                                                                                                                                          
------------------------------ -------- ------------------------- 
SID                                     NUMBER                                                                                                                                                                                        
SERIAL#                                 NUMBER                                                                                                                                                                                        
USERNAME                                VARCHAR2(30)                                                                                                                                                                                  
OSUSER                                  VARCHAR2(30)                                                                                                                                                                                  
SESSION_PROCESS_ADDR                    RAW(0)                                                                                                                                                                                        
OS_CLIENT_PROCESS_ID                    VARCHAR2(24)                                                                                                                                                                                  
LOGON_TIME                              DATE                                                                                                                                                                                          
TYPE                                    VARCHAR2(10)                                                                                                                                                                                  
EVENT                                   VARCHAR2(64)                                                                                                                                                                                  
EVENT#                                  NUMBER                                                                                                                                                                                        
TOTAL_WAITS                             NUMBER                                                                                                                                                                                        
TOTAL_TIMEOUTS                          NUMBER                                                                                                                                                                                        
TIME_WAITED_CSECS                       NUMBER                                                                                                                                                                                        
AVERAGE_WAIT_CSECS                      NUMBER                                                                                                                                                                                        
MAX_WAIT_CSECS                          NUMBER                                                                                                                                                                                        
TIME_WAITED_MICRO                       NUMBER                                                                                                                                                                                        
LOGOFF_TIMESTAMP                        DATE                                                                                                                                                                                          

17 rows selected

desc cc_sesstat_history;
Name                           Null     Type                                                                                                                                                                                          
------------------------------ -------- ----------------
USERNAME                                VARCHAR2(30)                                                                                                                                                                                  
OSUSER                                  VARCHAR2(30)                                                                                                                                                                                  
SID                                     NUMBER                                                                                                                                                                                        
SERIAL#                                 NUMBER                                                                                                                                                                                        
SESSION_PROCESS_ADDR                    RAW(0)                                                                                                                                                                                        
OS_CLIENT_PROCESS_ID                    VARCHAR2(24)                                                                                                                                                                                  
LOGON_TIME                              DATE                                                                                                                                                                                          
STATISTIC#                              NUMBER                                                                                                                                                                                        
NAME                                    VARCHAR2(64)                                                                                                                                                                                  
VALUE                                   NUMBER                                                                                                                                                                                        
LOGOFF_TIMESTAMP                        DATE                                                                                                                                                                                          

11 rows selected

Comments

Processing
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Feb 3 2009
Added on Dec 30 2008
5 comments
404 views