Nachricht

Package T4F_PROCS

Das Package T4F_PROCS enthält Debugging- und Logging-Prozeduren.

 


procedure debug (msg    varchar2)

Usage: PL/SQL (DB)

Ausgabe von Debug-Information. Debugging kann über die Tabelle T4F_DEBUG dynamisch und selektiv ein-/ausgeschaltet werden. Ausgabe wahlweise in DB-Tabelle oder über DBMS.output.

top

 


procedure set_debug (p_mode    varchar2)

Usage: PL/SQL (DB)

Explizites setzen des Debug-Modes. Mögliche Mode sind OUT, ORA oder JOB.

top


procedure set_msginfo (msg    varchar2)

Usage: PL/SQL (DB)

Diese Prozedur ermöglicht es, Messages die aus der Datenbank ausgelöst werden (z.B. aus stored procedures, exceptions) dynamische Parameter mitzugeben.

top

 


function get_msginfo
return varchar2

Usage: PL/SQL

Retourniert den letzten über set_msginfo gesetzten Wert.

top

 


procedure set_logging (p_name   in t4f_logdata.log_name%type,
p_level in t4f_logdata.log_level%type,
p_option in varchar2);

Usage: PL/SQL

Setup der Logging-Umgebung für die aktuelle Session. Mögliche Mode sind OUT, ORA oder JOB. Alle Meldungen mit einem Level höher als p_level werden unterdrückt.

top

 


procedure log (p_text in t4f_logdata.log_text%type);

Usage: PL/SQL

Schreiben einer wichtigen Logging-Meldung (Severity I, Level 1).

top

 


procedure say (p_text in t4f_logdata.log_text%type);

Usage: PL/SQL

Schreiben einer unwichtigen Logging-Meldung (Severity I, Level 2).

top

 


procedure warn (p_text in t4f_logdata.log_text%type);

Usage: PL/SQL

Logging einer applikatorischen Warnung (Severity W, Level 0).

top

 


procedure purgelog;

Usage: PL/SQL

Löschen alter Logmeldungen.

top

 


function view_logging (
p_view in t4f_logdata.log_text%type
)
return integer;

Usage: View Definition

Einfaches Accounting von Selects auf eine View. Pro Zugriff (via Subquery auf dual) wird eine Row in die Logging-Pipe geschrieben. Eine Pipe ist notwendig, da bei Zugriffen über DB-Links keine autonomen Transaktionen erlaubt sind.

top

 


procedure view_logging_reader;

Usage: PL/SQL

Liest die Einträge in der Logging-Pipe und schreibt sie in die Logging-Tabelle.

top


Package T4F_TRACE

Das Package T4F_TRACE enthält die für eine Historisierung notwendigen Prozeduren. Für die Historisierung der Mutationen auf einer Tabelle genügt es, darauf einen DB-Trigger gemäss dem unten beschriebenen Muster einzurichten.

 


procedure initialize (
p_ tab in varchar2,
p_format in varchar2)

Usage: PL/SQL (history trigger)

Initialisierung eines History-Triggers.

top

 


procedure assemble (
p0 in varchar2,
p1 in varchar2 := NULL,
p2 in varchar2 := NULL,
p3 in varchar2 := NULL,
p4 in varchar2 := NULL,
p5 in varchar2 := NULL,
p6 in varchar2 := NULL,
p7 in varchar2 := NULL,
p8 in varchar2 := NULL,
p9 in varchar2 := NULL,
p10 in varchar2 := NULL,
p11 in varchar2 := NULL,
p12 in varchar2 := NULL)

Usage: PL/SQL (history trigger)

Zusammenstellen des Historisierungsbuffers.

top

 


procedure loghistory (
tab in varchar2,
action in varchar2,
state in varchar2,
key in varchar2,
data in varchar2)

Usage: PL/SQL (history trigger)

Erstellen eines Historisierungsrecords.

top

 


 

Beispiel eines Historisierungstriggers

Nach dem Einbau dieses Triggers werden alle Mutationen auf der Tabelle lfc_phase historisiert.

 

create or replace trigger lfc_phase_his
before insert or update or delete on lfc_phase
for each row
declare
l_okey t4f.t4f_history.his_key%type;
l_nkey t4f.t4f_history.his_key%type;
l_obuff t4f.t4f_history.his_data%type;
l_nbuff t4f.t4f_history.his_data%type;
l_tab t4f.t4f_history.his_table%type := 'LFC_PHASE';
begin
t4f_trace.initialize (l_tab, '1.0');

if (inserting or updating) then
l_nkey := :new.pha_id;
l_nbuff := t4f_trace.assemble (
:new.pha_prc_id,
:new.pha_type,
:new.pha_name,
:new.pha_desc
);
end if;
if (updating or deleting) then
l_okey := :old.pha_id;
l_obuff := t4f_trace.assemble (
:old.pha_prc_id,
:old.pha_type,
:old.pha_name,
:old.pha_desc
);
end if;

if (inserting) then
t4f_trace.loghistory (l_tab, 'INS', 'N', l_nkey, l_nbuff);
elsif (updating) then
t4f_trace.loghistory (l_tab, 'UPD', 'O', l_okey, l_obuff);
t4f_trace.loghistory (l_tab, 'UPD', 'N', l_nkey, l_nbuff);
elsif (deleting) then
t4f_trace.loghistory (l_tab, 'DEL', 'O', l_okey, l_obuff);
end if;
end;

 


Package T4F_UTIL

 


function rows2item (
p_tab in varchar2,
p_col in varchar2,
p_where in varchar2 := '1=1',
p_order in varchar2 := '1',
p_delim in varchar2 := ', ',
p_frmt in varchar2 := null
) return varchar2;

Usage: PL/SQL (history trigger)

Über diese Funktion können Attribute einer Tabelle, die in mehreren Rows abgelegt sind, in einer Column einer Query zusammengefasst werden. Zum Beispiel:

select rownum, 
t4f.t4f_util.rows2item ('roots.adr_ort',
'ort_name',
'ort_id like ''844%''',
NULL,
','||chr(10),
'%%s'
) val,
t4f.t4f_util.rows2item ('roots.adr_ort',
'ort_name',
'ort_id like ''844%''') val2
from dual
/

ROWNUM VAL VAL2
---------- -------------------------------------------------- ---------------------------------
1 Dachsen, Dachsen, Henggart, Hettlingen
Henggart,
Hettlingen

top

 


procedure pin_objects (
p_caller in varchar2
);

Usage: PL/SQL (db startup triggers)

Seit längerem ist es in der Praxis üblich, wichtige Packages, Trigger und Sequenses in den Shared Pool zu 'pinnen'. Dies bringt Perfomancevorteile und verhindert unnötige Speicherfragmentation.

Ab Oracle 8i bietet sich dafür ein DB-Startup-Trigger an. Die Vorgehensweise ist aber insbesondere bei Prozeduren die mit Pragmas behaftet sind nicht ganz trivial.

Die vorliegende Prozedur implementiert eine generische Ladeprozedur. Die zu ladenden Objekte können zudem komfortabel über ein Listbox definiert werden. Konfigurationsänderungen benötigen somit keine Änderung der heiklen DB-Trigger.

Der Caller braucht das Recht 'ADMINISTER DATABASE TRIGGER' und EXECUTE auf SYS.DBMS_SHARED_POOL, da die Prozedur unter Invoker Rights ablaufen muss.

Beispiel:

create or replace trigger sys_db_startup_trg
after startup on database
begin
t4f.t4f_util.pin_objects ('SYS');
end;

top

 


function split (
p_string in varchar2,
p_item in integer,
p_delim in varchar2 := ':'
) return varchar2;

Usage: PL/SQL (db startup triggers)

Extrahieren des n. (p_item) Elementes in einem (durch p_delim) delimited String.

top

 


function get_lb_label (
p_lb_id in t4f.t4f_listbox.lb_id%type,
p_lb_value in t4f.t4f_listitem.li_value%type
) return t4f.t4f_listitem.li_label%type;

Usage: PL/SQL

Extrahieren des Labels des entsprechenden Listitems.

top

 


function url_enocde (
p_string in varchar2
) return varchar2;

Usage: PL/SQL

Encodieren eines Strings, so dass er in einem URL verwendet werden kann (Umwandeln von Spezialzeichen in %-Hexdcode).