Der nachfolgende Code ist frei verfügbar, solange er nicht kommerziell verwendet wird! Falls er so wie veröffentlicht, in Teilen oder abgewandelt zum Einsatz kommt, würde ich mich sehr über eine kurze E-Mail freuen.
Datenmodel:
Beschreibung:
Zur Speicherung von Parameterdaten wurde eine Datenstruktur realisiert, die ähnlich aufgebaut ist wie ein INI-File. Die Datenstruktur enthält Parametergruppen, der wiederum verschiedene, einzelne Parameter zugeordnet werden. Ein Parameter hat ein in der Parametergruppe einen eindeutigen Label. Da Parameter unterschiedliche Datentypen in der gleichen Struktur gehalten werden sollen, werden alle Parameter als String (varchar) gespeichert.
Der Datenzugriff auf die Parametertabellen erfolgt über die Proceduren/Funktionen des Packages parameter, über die das Auslesen und Ändern der Parameter erfolgt.
Tabellen:
tpar_parameter
Enthält die Parmeter, die in Gruppen (tpag_parameter_group) zusammengefaßt werden können. Die Parameter in par_value werden grundsätzlich als String angegeben. Ihr Datentyp läßt sich über die Tabelle tpat_parameter_type ermitteln.
Spalte
Datentyp
Comment
par_pag_id
INTEGER
Referenz-ID zu [tpag_parameter_group] (Parametergruppen)
par_label
VARCHAR2(32)
Name des Parameters
par_value
VARCHAR2((255)
Wert des Parameters
par_pat_id
INTEGER
Referenz-ID zu [tpat_parameter_type] (Datentyp)
par_description
VARCHAR2(255)
Beschreibung
tpag_parameter_group
Enthält die Definition der Parametergruppen.
Spalte
Datentyp
Comment
pag_id
INTEGER
Identifier
pag_label
VARCHAR2((32)
Name der Parametergruppe
tpat_parameter_type
Definiert den Datentyp des Parmeters (integer, string float, etc.).
Spalte
Datentyp
Comment
pat_id
INTEGER
Identifier
pat_label
VARCHAR2(16)
Name des Parameter-Datentyps
Die folgenden Werte sind implementiert:
1
:
string
2
:
integer
3
:
float
4
:
date
hpar_parameter
Enthält die Änderungshistorie der Parmeter. Änderungen auf der Tabelle tpar_parameter werden hier mittels des Triggers trg_par_parameter protokolliert. Wegen der besseren Übersicht werden dabei nur die Spalten befüllt, deren Inhalt geändert wurde. Alle anderen werden mit NULL befüllt.
Spalte
Datentyp
Comment
par_pag_id
INTEGER
Referenz-ID zu [tpag_parameter_group] (Parametergruppen)
par_label
VARCHAR2(32)
Name des Parameters
par_value
VARCHAR2((255)
Wert des Parameters
par_pat_id
INTEGER
Referenz-ID zu [tpat_parameter_type] (Datentyp)
par_description
VARCHAR2(255)
Beschreibung
par_user
VARCHAR2(32)
User. der die Änderung durchgeführt hat
par_timestamp
TIMESTAMP
Zeitpunkt der Änderung
par_action
CHAR(1)
SQL der Änderung (I = Insert, U = Update, D = Delete)
Proceduren/ Funktionen:
Die Proceduren / Funktionen befinden sich im Package parameter:
get_parameter
FUNCTION get_parameter
(
parameter_group IN tpag_parameter_group.pag_label%TYPE,
parameter IN tpar_parameter.par_label%TYPE
) RETURN tpar_parameter.par_value%TYPE;
FUNCTION get_parameter
(
parameter_group IN tpag_parameter_group.pag_label%TYPE,
parameter IN tpar_parameter.par_label%TYPE,
default_value IN tpar_parameter.par_value%TYPE
) RETURN tpar_parameter.par_value%TYPE;
Gibt den zugehörigen Wert eines Parameters (parameter) aus einer spezifizierte Parametergruppe (parameter_group) zurück. Ist kein entsprechender Parameter auf der Tabelle definiert, dann wird, wenn kein Defaultwert (default_value) definiert wurde, NULL zurückgeben, andernfalls der Defaultwert.
get_parameter_type
FUNCTION get_parameter_type
(
parameter_group IN tpag_parameter_group.pag_label%TYPE,
parameter IN tpar_parameter.par_label%TYPE
) RETURN tpat_parameter_type.pat_label%TYPE;
Gibt den zugehörigen Datentyp eines Parameters zurück. Ist kein entsprechender Parameter auf der Tabelle definiert, dann wird NULL zurückgeben.
set_parameter
FUNCTION set_parameter
(
parameter_group IN tpag_parameter_group.pag_label%TYPE,
parameter IN tpar_parameter.par_label%TYPE,
parameter_value IN tpar_parameter.par_value%TYPE
) RETURN INTEGER;
Ändert den zugehörigen Wert (parameter_value) eines Parameters (parameter) aus einer spezifizierte Parametergruppe (parameter_group).
Returnwerte:
1
=
OK
0
=
no parameter/parameter-group defined
create_parameter
FUNCTION create_parameter
(
parameter_group IN tpag_parameter_group.pag_label%TYPE,
parameter IN tpar_parameter.par_label%TYPE,
parameter_value IN tpar_parameter.par_value%TYPE,
parameter_type IN tpat_parameter_type.pat_label%TYPE,
parameter_description IN tpar_parameter.par_description%TYPE DEFAULT''
) RETURN INTEGER;
Erzeugt in der spezifizierte Parametergruppe (parameter_group) einen neuen Parameter (parameter) mit einem vorgegebenen Wert (parameter_value) und Datentype (parameter_type). Wird keine Parameterbeschreibung (parameter_description) übergeben, dann wird automatisch der Parametername (parameter) als Beschreibung übernommen.
Returnwerte:
1
=
OK
0
=
no parameter/parameter-group defined
-1
=
error during create parameter
Beispiel:
DECLARE
status INTEGER;
para tpar_parameter.par_value%TYPE; BEGIN
status := parameter.create_parameter('Account', 'Login', 'Mustermann', 'string', 'Login des Accounts');
DBMS_OUTPUT.PUT_LINE('Status create Account/Login: ' || status);
status := parameter.create_parameter('Account', 'Password', 'Geheim', 'string', 'Password des Accounts');
DBMS_OUTPUT.PUT_LINE('Status create Account/Password: ' || status);
DBMS_OUTPUT.PUT_LINE(' ');
para := parameter.get_parameter('Account', 'Login');
DBMS_OUTPUT.PUT_LINE('Account/Login: ' || para);
para := parameter.get_parameter('Account', 'Password');
DBMS_OUTPUT.PUT_LINE('Account/Password: ' || para);
DBMS_OUTPUT.PUT_LINE(' ');
status := parameter.set_parameter('Account', 'Password', 'StrengGeheim');
DBMS_OUTPUT.PUT_LINE('Status set Account/Password: ' || status);
DBMS_OUTPUT.PUT_LINE(' ');
para := parameter.get_parameter('Account', 'Password');
DBMS_OUTPUT.PUT_LINE('Account/Password: ' || para); END;
Output:
Status create Account/Login: 0
Status create Account/Password: 0