next up previous contents
Nächste Seite: proc_insert_bild Aufwärts: Prozeduren Vorherige Seite: proc_insert_artikel_inpara   Inhalt

proc_insert_artikel

/* 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;
/



Christian Raskob 2003-02-14