Deutsches Application Express Forum (ApEx) -- Installation , Engine / SQL , Anwendungen
HTMLDB Engine :  Oracle Apex The fastest message board... ever.
Alles in HTMLDB, Applikationen, Berichte, SQL ... 
Re: Anwendungen Erstellen - Kleine Tipps am Rande
geschrieben von: mozart (---.landkreis-oder-spree.de)
Datum:

Wegen Nachfrage hier Beispiele für selfmade Audit:

Ich habe eine Helpdeskanwendung die einen LDAP-Abgleich durchführt (TBLUSER). Zum Überprüfen was passiert ist benötigt man eine Tabelle für das Audit (TBLAUDIT) und einen entsprechenden Trigger:

CREATE TABLE TBLUSER
(
USRID NUMBER (9,0) DEFAULT -1 NOT NULL,
USERNAME VARCHAR2 (50) NOT NULL,
NACHNAME VARCHAR2 (50) DEFAULT '',
VORNAME VARCHAR2 (50) DEFAULT '',
TELEFON VARCHAR2 (50) DEFAULT '',
EMAIL VARCHAR2 (100) DEFAULT '',
ZIMMER VARCHAR2 (50) DEFAULT '',
COMPUTERNAME VARCHAR2 (255),
GEBID NUMBER (9,0),
ABTEILUNG VARCHAR2 (100) DEFAULT '',
KOSTENSTELLE VARCHAR2 (50) DEFAULT '',
GELOESCHT NUMBER (1,0) DEFAULT 0 NOT NULL,
RECHTE NUMBER (9,0) DEFAULT 0,
DISPATCHER NUMBER (1,0) DEFAULT 0 NOT NULL,
SPRID VARCHAR2 (2) DEFAULT 'de',
DISID NUMBER (9,0),
VERSION NUMBER (9,0),
FREI1 VARCHAR2 (255),
FREI2 VARCHAR2 (255),
FREI3 VARCHAR2 (255),
FREI4 VARCHAR2 (255),
FREI5 VARCHAR2 (255),
FREI6 VARCHAR2 (1000),
PAUSCHALE1 NUMBER (15,2) DEFAULT 0,
PAUSCHALE2 NUMBER (15,2) DEFAULT 0,
PAUSCHALE3 NUMBER (15,2) DEFAULT 0,
PROPERTIES LONG RAW,
BGRID NUMBER (9,0) DEFAULT 0 NOT NULL
)

CREATE TABLE TBLAUDIT
(
ID NUMBER NOT NULL,
AENDERUNG DATE,
SCHEMA VARCHAR2 (100),
TABELLE VARCHAR2 (100),
DATENSATZID NUMBER,
WER VARCHAR2 (100),
AKTION VARCHAR2 (50),
INHALT VARCHAR2 (500),
INHALT_ALT VARCHAR2 (500)
)

CREATE OR REPLACE TRIGGER TBLUSER_AIUR AFTER INSERT or UPDATE ON TBLUSER FOR EACH ROW
DECLARE v number;
BEGIN
if inserting then
-- Wenn neuer User dann Eintrag in TBLAUDIT
select max(id)+1 into v from TBLaudit;
INSERT INTO TBLAUDIT (ID, AENDERUNG, SCHEMA, TABELLE, DATENSATZID, WER, AKTION, INHALT)
VALUES ( v , sysdate, 'HD65', 'TBLUSER', :new.USRID, 'TBLUSER_AIUR', 'insert',
:new.GELOESCHT ||' '|| :new.USERNAME ||' '|| :new.NACHNAME ||' '||
:new.VORNAME ||' '|| :new.ABTEILUNG ||' '|| :new.KOSTENSTELLE ||' '|| :NEW.FREI3 );
else
-- Wenn User gelöscht, dann Eintrag in TBLAUDIT
IF :new.GELOESCHT = '1' and :old.GELOESCHT = '0'
then
select max(id)+1 into v from TBLaudit;
INSERT INTO TBLAUDIT
(ID, AENDERUNG, SCHEMA, TABELLE, DATENSATZID, WER, AKTION, INHALT, INHALT_ALT)
VALUES ( v , sysdate, 'HD65', 'TBLUSER', :new.USRID, 'TBLUSER_AIUR', 'gelöscht',
:new.GELOESCHT ||' '|| :new.USERNAME ||' '|| :new.NACHNAME ||' '||
:new.VORNAME ||' '|| :new.ABTEILUNG ||' '|| :new.KOSTENSTELLE ||' '|| :NEW.FREI3,
:old.GELOESCHT ||' '|| :old.USERNAME ||' '|| :old.NACHNAME ||' '||
:old.VORNAME ||' '|| :old.ABTEILUNG ||' '|| :old.KOSTENSTELLE ||' '|| :OLD.FREI3 );
else null;
end if;
end if;
END;


Oder

CREATE TABLE DARLEHEN_ZAHLUNGEN
(
ZAL_ID NUMBER NOT NULL,
DAR_ID NUMBER,
BETRAG NUMBER (8,2),
DATUM DATE,
LOG VARCHAR2 (100)
)

CREATE TABLE DARLEHEN_AUDIT
(
AUD_ID NUMBER NOT NULL,
LOG VARCHAR2 (100),
DARLEHENSBETRAG_ALT NUMBER (8,2),
DARLEHENSBETRAG_NEU NUMBER (8,2),
DATUM_ALT DATE,
DATUM_NEU DATE,
AKTION VARCHAR2 (50),
DAR_ID NUMBER
);

CREATE SEQUENCE DARLEHEN_AUDIT_SEQ
START WITH 1
INCREMENT BY 1;

CREATE OR REPLACE TRIGGER "BI_DARLEHEN_AUDIT"
before insert on "DARLEHEN_AUDIT"
for each row
begin
select "DARLEHEN_AUDIT_SEQ".nextval into :NEW.AUD_ID from dual;
end;

CREATE OR REPLACE TRIGGER DARLEHEN_AIUDR AFTER DELETE OR INSERT OR UPDATE ON DARLEHEN FOR EACH ROW
BEGIN
if (:old.datum != :new.datum) or (:old.darlehen != :new.darlehen) or :old.darlehen is null or :old.datum is null or deleting or inserting then
if deleting then insert into darlehen_audit (LOG,DARLEHENSBETRAG_ALT,DARLEHENSBETRAG_NEU, DATUM_ALT, DATUM_NEU,dar_ID, AKTION ) Values
( to_char(sysdate,'DD.MM.YYYY HH24:MI:SS') ||' '|| v('APP_USER'), :old.darlehen , :old.darlehen , :old.datum, :old.datum, :old.dar_id , 'Gelöscht');
elsif updating then
insert into darlehen_audit (LOG,DARLEHENSBETRAG_ALT,DARLEHENSBETRAG_NEU, DATUM_ALT, DATUM_NEU,dar_ID,AKTION ) Values ( to_char(sysdate,'DD.MM.YYYY HH24:MI:SS') ||' '|| v('APP_USER') ,
:old.darlehen , :new.darlehen , :old.datum, :new.datum, :new.dar_id , 'Geändert');
else insert into darlehen_audit (LOG,DARLEHENSBETRAG_ALT,DARLEHENSBETRAG_NEU, DATUM_ALT, DATUM_NEU,dar_ID,AKTION ) Values
( to_char(sysdate,'DD.MM.YYYY HH24:MI:SS') ||' '|| v('APP_USER') ,
:old.darlehen , :new.darlehen , :old.datum, :new.datum, :new.dar_id , 'Eingefügt');
end if;
end if;
END;


Ich hoffe das hilft .. ;-)


Gruß
mozart <[a]> htmldb.de



Thema Neugierige geschrieben von geschrieben
Anwendungen Erstellen - Kleine Tipps am Rande 3130 mozart
Re: Anwendungen Erstellen - Kleine Tipps am Rande 1638 mozart


In diesem Forum dürfen nur registrierte Benutzer schreiben.
This forum powered by Phorum.