Как создать триггер для хранения всего DML в oracle? - PullRequest
0 голосов
/ 17 марта 2020
CREATE OR REPLACE TRIGGER trg_dml_info
 -- BEFORE LOGOFF  ON DATABASE
AFTER SELECT OR INSERT  OR UPDATE OR DELETE ON SCHEMA
   DECLARE
          session_id VARCHAR2(10),
          user_logon_name VARCHAR2(30),
          sql_idd VARCHAR2(10),
          sql_child_numbert VARCHAR2(30),
          optimizer_modee VARCHAR2(30),
          sql_textt VARCHAR2(1000)
BEGIN
SELECT x.sid  
    INTO session_id
    FROM v$sqlarea x;

SELECT x.USERNAME  
    INTO user_logon_name
    FROM v$sqlarea x;

SELECT x.SQL_ID  
    INTO sql_idd
    FROM v$sqlarea x;

SELECT x.SQL_CHILD_NUMBER  
    INTO sql_child_numbert
    FROM v$sqlarea x;

SELECT x.OPTIMIZER_MODE  
    INTO optimizer_modee
    FROM v$sqlarea x;

SELECT x.SQL_TEXT  
    INTO sql_textt
    FROM v$sqlarea x;

INSERT INTO DML$info VALUES
    (session_id,user_logon_name,sql_idd,sql_child_numbert,optimizer_modee,sql_textt)
    where x.sql_hash_value = sqlarea.hash_value
            and x.sql_address = sqlarea.address;
commit;
END;
...