Announcement

Collapse
No announcement yet.

Wie einen Trigger erstellen(2)?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie einen Trigger erstellen(2)?

    Hallo,
    nachdem mein erster Trigger prima funktioniert und meine FKs schreibt, wäre es schön noch einen zu haben, der mein Feld Initialen automatisch beim Speichern des DS befüllt.
    Dazu habe ich die Felder VORNAME, NACHNAME und INITIALEN in der Tabelle tblPERSN.
    Ich müsste dann aber wohl VORNAME und NACHNAME zuerst in ein Datenfeld schreiben und dann mit SUBSTR den ersten Buchstaben auslesen?
    Ich stelle mir das in etwa so vor:
    -----
    DECLARE
    cursor mycur is select :new.VORNAME, :new.NACHNAME from tblPERSN;
    v_VORNAME tblPERSN.VORNAME%type;
    v_NACHNAME tblPERSN.NACHNAME%type;
    v_INITIALEN tblPERSN.INITIALEN%type;
    BEGIN
    open mycur
    fetch mycur into v_VORNAME, v_NACHNAME;
    .... v_INITIALEN:= SUBSTR(v_VORNAME 1,1)
    .... v_INITIALEN:= v_INITIALEN & SUBSTR(v_NACHNAME 1,1) (o.ä.)
    INSERT into PERSN.INITIALEN Values (v_INITIALEN)
    close mycur
    -----
    Liege ich damit ungefähr richtig?
    Gruss
    Klaus

  • #2
    <cite>Liege ich damit ungefähr richtig? </cite>
    Nein, voll daneben )
    Zumindest funktioniert das so in einem Trigger niemals! Aus zwei Gründen:
    1. Sollte man nie und wirklich nie in einem Insert-Trigger ein Insert auf die gleiche Tabelle auslösen. Ein Insert zündet den Trigger, der macht ein Insert, welches den Trigger zündet, der wiederum ein Insert macht...
    2. Es ist unter Oracle nicht möglich in einem Zeilentrigger per Select auf die gerade geänderte Tabelle zuzugreifen.

    Außerdem kannst du in einem Zeilentrigger bereits über die Aliase :Old und :New direkt auf die alten und neuen Werte zugreifen. In einem BEFORE Trigger sogar schreibenderweise.

    Dein Trigger könnte also so aussehen:<br>
    CREATE OR REPLACE TRIGGER <i>triggername</i>
    BEFORE INSERT ON <i>tabellenname</i> FOR EACH ROW
    begin
    :New.INITIALEN := SUBSTR(:New.VORNAME 1,1) || SUBSTR(:New.NACHNAME 1,1);
    end;<br>
    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Danke, das funktioniert :-) Ist natürlich logisch, ein Inserttrigger auf die gleiche Tabelle gibt natürlich keinen Sinn... der müsste eigentlich endlos triggern. Und dass der Select nicht funktionieren würde hab ich irgendwie schon geahnt

      Comment

      Working...
      X