/* Erwartet als Eingabewerte alle Felder von redaktioneller_inhalt
und artikel (ID und VERSION wird nur einmal erwartet, da die Werte
in beiden Tabellen identisch sein muessen). Bei neuen Einträgen
ist ID und VERSION = 0, HATVALI wird nicht mitgeliefert, da noch
keine Validierung nach dem 4-Augen-Prinzip erfolgt ist. Es wird
noch kein Zeitraum und keine Verknüpfung in aktuell_in erstellt. */
create or replace procedure proc_insert_artikel
(R_ID IN OUT REDAKTIONELLER_INHALT.ID%TYPE,
R_VERSION IN OUT REDAKTIONELLER_INHALT.VERSION%TYPE,
R_MUSSVR_ID IN REDAKTIONELLER_INHALT.MUSSVALI_ROLLE_ID%TYPE,
R_ERST_PERS_ID IN REDAKTIONELLER_INHALT.ERSTELLER_PERSON_ID%TYPE,
R_ERST_PERS_V IN
REDAKTIONELLER_INHALT.ERSTELLER_PERSON_VERSION%TYPE,
R_TITEL IN REDAKTIONELLER_INHALT.TITEL%TYPE,
A_TEXT IN ARTIKEL.TEXT%TYPE) IS
/* Variablendeklaration */
inh_id inhalt.id%type;
maxVers redaktioneller_inhalt.version%type;
hat_vali_anzahl number;
begin
/* wenn keine ID vorhanden ist, ist es ein neuer Eintrag und eine
ID muss in Inhalt erstellt werden; Version ist automatisch 1 */
if (R_ID = 0) then
select ID_Inhalt.nextval into inh_id
from dual;
insert into Inhalt
(ID, Inhaltstyp_ID)
values
(inh_id, 16);
R_ID := inh_id;
R_VERSION := 1;
/* ist ID <> 0, muss man die alte Version deaktivieren und die
hoechste bereits existierende Version zur ID bestimmen und diese
um 1 erhoehen */
else
/* deaktiviere die bestehende Version durch setzen von
aktuell_bis, ueberpruefe vorher, ob die Version überhaupt schon
validiert war; war sie nicht validiert, existiert auch kein
Eintrag in aktuell_in */
select count (hatvali_person_id) into hat_vali_anzahl
from redaktioneller_inhalt
where (id = r_id and version = r_version);
if (hat_vali_anzahl > 0) then
proc_deaktivieren(R_ID);
end if;
select max (Version) into maxVers
from redaktioneller_inhalt
where ID = R_ID;
R_VERSION := (maxVers + 1);
end if;
/* erstelle einen neuen Eintrag in Versionierter_Inhalt */
insert into versionierter_inhalt
(ID, Version)
values
(R_ID, R_VERSION);
/* schreibe die Daten in redaktioneller_inhalt */
insert into redaktioneller_inhalt
(id, version, mussvali_rolle_id, ersteller_person_id,
ersteller_person_version, titel)
values
(R_ID, R_VERSION, R_MUSSVR_ID, R_ERST_PERS_ID, R_ERST_PERS_V,
R_TITEL);
/* erstelle einen neuen Eintrag in Artikel. */
insert into artikel
(id, version, text)
values
(R_ID, R_VERSION, A_Text);
end;
/