Oekosoft |  T4F |  PL/SQL |  Form |  DB-Tables |  DB-Packages |  Kochbuch

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),
                               '<A HREF=test.cgi?ort=%%s>%%s</A>'
       ) val,
       t4f.t4f_util.rows2item ('roots.adr_ort',
                               'ort_name',
                               'ort_id like ''844%''') val2
from dual
/

    ROWNUM VAL                                                   VAL2
---------- --------------------------------------------------    ---------------------------------
         1 <A HREF=test.cgi?ort=Dachsen>Dachsen</A>,             Dachsen, Henggart, Hettlingen
           <A HREF=test.cgi?ort=Henggart>Henggart</A>,
           <A HREF=test.cgi?ort=Hettlingen>Hettlingen</A>

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).

top

Oekosoft |  T4F |  PL/SQL |  Form |  DB-Tables |  DB-Packages |  Kochbuch

Copyright © Oekosoft - generated by WPG 15.06.2007