Oracle Logbook

August 22, 2007

Audit Generator

Filed under: Uncategorized — heliodias @ 2:14 pm

–  Audit Generator
–  By Helio Dias
–  http://heliodias.com
–  20/08/2004, Audit Update and Delete

SET SERVEROUTPUT ON
SET FEEDBACK OFF
PROMPT Name of Target Table
DEFINE tbpai = &tabela_pai
PROMPT Name of Log Table
DEFINE tblog = &tabela_log
SPOOL  audit_gen.SQL
DECLARE
   v_TABELA_PAI     VARCHAR2( 30) := ‘&tbpai’;
   V_TABELA_LOG    VARCHAR2( 30) := ‘&tblog’;
   CURSOR CUR_COLUNAS IS
 SELECT COLUMN_NAME COLUNA,DATA_TYPE TIPO,
 DECODE(DATA_TYPE,
 ’NUMBER’  ,’(‘||NVL(DATA_PRECISION,DATA_LENGTH)||’,'||NVL(DATA_SCALE,0)||’)',
 ’VARCHAR2′,’(‘||DATA_LENGTH||’)',
 ’CHAR’,'(‘||DATA_LENGTH||’)') COMPLEMENTO
 FROM user_tab_columns WHERE table_name=V_TABELA_PAI
 AND DATA_TYPE NOT IN (‘BLOB’,'CLOB’,'LONG’,'LONGRAW’)
 ORDER BY COLUMN_ID;
   V_COLUNA VARCHAR2(30);
   V_TIPO VARCHAR2(30);
   V_COMPLEMENTO VARCHAR2(30):=”;
BEGIN
   dbms_output.enable( 200000);
   v_tabela_PAI     := UPPER( v_tabela_PAI  );
   v_tabela_LOG    := UPPER( v_tabela_LOG );
   OPEN CUR_COLUNAS;
   FETCH CUR_COLUNAS INTO V_COLUNA,V_TIPO,V_COMPLEMENTO;
   DBMS_OUTPUT.PUT_LINE(‘CREATE TABLE ‘||V_TABELA_LOG||’(‘);
   WHILE CUR_COLUNAS%FOUND LOOP
   DBMS_OUTPUT.PUT_LINE(V_COLUNA||’ ‘||V_TIPO||V_COMPLEMENTO||’,');
   V_COMPLEMENTO:=”;
   FETCH CUR_COLUNAS INTO V_COLUNA,V_TIPO,V_COMPLEMENTO;
   END LOOP;
   CLOSE CUR_COLUNAS;
   DBMS_OUTPUT.PUT_LINE( ‘LOG_USUARIO VARCHAR2(30),LOG_DATA DATE,LOG_OPERACAO CHAR(1));’ );
   DBMS_OUTPUT.PUT_LINE(‘CREATE OR REPLACE TRIGGER ‘||V_TABELA_LOG||’_TRX’);
   DBMS_OUTPUT.PUT_LINE(‘AFTER UPDATE OR DELETE’);
   DBMS_OUTPUT.PUT_LINE(‘ON ‘||V_TABELA_PAI||’ FOR EACH ROW’);
   DBMS_OUTPUT.PUT_LINE(‘DECLARE V_OPERACAO CHAR(1);’);
   DBMS_OUTPUT.PUT_LINE(‘BEGIN’);
   DBMS_OUTPUT.PUT_LINE(‘V_OPERACAO:=’||CHR(39)||’U'||CHR(39)||’;');
   DBMS_OUTPUT.PUT_LINE(‘IF DELETING THEN’);
   DBMS_OUTPUT.PUT_LINE(‘V_OPERACAO:=’||CHR(39)||’D'||CHR(39)||’;');
   DBMS_OUTPUT.PUT_LINE(‘END IF;’);
   DBMS_OUTPUT.PUT_LINE(‘INSERT INTO ‘||V_TABELA_LOG||’(‘ );
   OPEN CUR_COLUNAS;
   FETCH CUR_COLUNAS INTO V_COLUNA,V_TIPO,V_COMPLEMENTO;
   WHILE CUR_COLUNAS%FOUND LOOP
   DBMS_OUTPUT.PUT_LINE(V_COLUNA||’,');
   FETCH CUR_COLUNAS INTO V_COLUNA,V_TIPO,V_COMPLEMENTO;
   END LOOP;
   CLOSE CUR_COLUNAS;
   DBMS_OUTPUT.PUT_LINE(‘LOG_USUARIO,LOG_DATA,LOG_OPERACAO)’);
   DBMS_OUTPUT.PUT_LINE(‘VALUES (‘);
   OPEN CUR_COLUNAS;
   FETCH CUR_COLUNAS INTO V_COLUNA,V_TIPO,V_COMPLEMENTO;
   WHILE CUR_COLUNAS%FOUND LOOP
   DBMS_OUTPUT.PUT_LINE(‘:OLD.’||V_COLUNA||’,');
   FETCH CUR_COLUNAS INTO V_COLUNA,V_TIPO,V_COMPLEMENTO;
   END LOOP;
   CLOSE CUR_COLUNAS;
   DBMS_OUTPUT.PUT_LINE (‘USER,SYSDATE,V_OPERACAO);’);
   DBMS_OUTPUT.PUT_LINE(‘END;’);
   DBMS_OUTPUT.PUT_LINE(‘/’);
end;
/
SPOOL OFF
SET FEEDBACK ON

No Comments Yet »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.