tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
623
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    cullmann cullmann ist offline Mitglied Bronze
    Registriert seit
    Dec 2006
    Beiträge
    26
    Servus,

    versuche mich gerade an nem Trigger, leider tritt immer die folgende Fehlermeldung auf:
    Error(31,15): PLS-00103: Fand das Symbol "END" als eines der folgenden erwartet wurde: ( - + case mod new not null <an identifier> <a double-quoted delimited-identifier> <a bind variable> avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string> pipe <ein alternativ in Anführungszeichen gesetztes Zeichenfolgenliteral mit Zeichensatzangabe> <eine alter
    Benutze Oracle 10g

    TRIGGER:
    -----------------------------------------------------------------------------

    CREATE OR REPLACE
    TRIGGER IU_LEHRVER_AFTER_STMT AFTER INSERT OR UPDATE ON LEHRVERANSTALTUNGEN
    DECLARE
    old_fachid FACH.fach%TYPE;
    --in dieser Var. wird beim update die alte Fachid gespeichert
    cursor lehrv is
    select lehrid, bezeichung from LEHRVERANSTALTUNGEN
    where stand_alone = 1 for update;

    BEGIN
    IF INSERTING then
    for item in lehrv loop
    execute:= package_fach.insert_FACH(fachseq.nextval, item.bezeichnung, item.lehrid);
    end loop;
    END IF;

    IF UPDATING then
    for item in lehrv
    loop

    select fachid into old_fachid from fach where SA_Lehrvera=item.lehrid;
    --Die alte Fachid wird gespeicht, das sich diese beim Update
    --nicht ändern darf!!

    if old_fachid is null then
    execute:= package_fach.insert_fach(fachseq.nextval, item.bezeichnung, item.lehrid);
    ELSIF
    -- execute:= package_fach.DELETE_Fach(item.lehrid);
    --Beim Update muss der alte Zustand gelöscht werden, anderfalls
    --würde man ein und die selbe Lehrva mehrfach als Fach eintragen
    --execute package_fach.insert(old_fachid, item.bezeichnung, item.lehrid);

    end if;
    --Beim update auf Fach muss die alte Fachid erhalten bleiben,
    end loop;
    END IF;--END if updating

    END IU_LEHRVER_AFTER_STMT;

    Kann ja eigentlich nur ein Syntax error sein, vielleicht kann mir einer von euch auf die Sprünge helfen

    Danke
     

  2. #2
    Avatar von Exceptionfault
    Exceptionfault Exceptionfault ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Ort
    Neckarsulm
    Beiträge
    348
    Zunächst solltest du deinen Code bitte in die CODE oder SQL Tags setzen, dass man ihn einigermassen lesen kann. Ausserdem wäre es gut im Titel des Threads auch das Datenbanksystem anzugeben.

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    CREATE OR REPLACE
        TRIGGER IU_LEHRVER_AFTER_STMT AFTER INSERT OR UPDATE ON LEHRVERANSTALTUNGEN
    DECLARE
        old_fachid FACH.fach%TYPE;
        --in dieser Var. wird beim update die alte Fachid gespeichert
        cursor lehrv IS
            SELECT lehrid, bezeichung FROM LEHRVERANSTALTUNGEN
            WHERE stand_alone = 1 FOR UPDATE;
     
    BEGIN
        IF INSERTING THEN
            FOR item IN lehrv loop
                EXECUTE:= package_fach.insert_FACH(fachseq.NEXTVAL, item.bezeichnung, item.lehrid);
            END loop;
        END IF;
     
        IF UPDATING THEN
            FOR item IN lehrv loop
     
                SELECT fachid INTO old_fachid FROM fach WHERE SA_Lehrvera=item.lehrid;
                --Die alte Fachid wird gespeicht, das sich diese beim Update
                --nicht ändern darf!!
     
                IF old_fachid IS NULL THEN
                    EXECUTE:= package_fach.insert_fach(fachseq.NEXTVAL, item.bezeichnung, item.lehrid);
                ELSIF
                    -- execute:= package_fach.DELETE_Fach(item.lehrid);
                    --Beim Update muss der alte Zustand gelöscht werden, anderfalls
                    --würde man ein und die selbe Lehrva mehrfach als Fach eintragen
                    --execute package_fach.insert(old_fachid, item.bezeichnung, item.lehrid);
                END IF;
            
                --Beim update auf Fach muss die alte Fachid erhalten bleiben,
            END loop;
            
        END IF;--END if updating
     
    END IU_LEHRVER_AFTER_STMT;

    Der Fehler liegt vermutlich hier:
    Code sql:
    1
    2
    3
    4
    5
    6
    
    ELSIF
                    -- execute:= package_fach.DELETE_Fach(item.lehrid);
                    --Beim Update muss der alte Zustand gelöscht werden, anderfalls
                    --würde man ein und die selbe Lehrva mehrfach als Fach eintragen
                    --execute package_fach.insert(old_fachid, item.bezeichnung, item.lehrid);
    END IF;
    Deine ELSE Anweisung ist leer, bzw. es stehen nur Kommentare drin. Entweder nimmst du das ELSIF ganz raus, oder fügst einfach die Anweisung "NULL;" zwischen ELSIF und END IF;
     
    liebe Grüße
    Exceptionfault (http://exceptionfault.de)

    Never say: "Always"! Always say: "Never say never"! - Tom Kyte @ Ask Tom Live in Berlin 2008

  3. #3
    cullmann cullmann ist offline Mitglied Bronze
    Registriert seit
    Dec 2006
    Beiträge
    26
    Servus, habs selbst rausgefunden, problem was das exceute... SP werden im block ja ohen exceute ausgeführt....

    Trotzdem danke

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    CREATE OR REPLACE
    TRIGGER IU_LEHRVER_AFTER_STMT AFTER INSERT OR UPDATE ON LEHRVERANSTALTUNGEN 
    DECLARE
      old_fachid FACH.fachid%TYPE;
      --in dieser Var. wird beim update die alte Fachid gespeichert
      cursor lehrv is
        select lehrid, bezeichnung from LEHRVERANSTALTUNGEN 
            where stand_alone = 1 for update;
          
    BEGIN  
      IF INSERTING then
      
        for item in lehrv loop    
             package_fach.insert_FACH(item.bezeichnung, item.lehrid);
        end loop;
      END IF;
      
      IF UPDATING then
          for item in lehrv 
          loop 
          
                 select fachid into old_fachid from fach where SA_Lehrvera=item.lehrid;
                  --Die alte Fachid wird gespeicht, das sich diese beim Update 
                  --nicht ändern darf!!
                  
                  if old_fachid is null then
                    package_fach.insert_fach(item.bezeichnung, item.lehrid);
                  ELSE 
                    
                     package_fach.DELETE_Fach(item.lehrid);
                    --Beim Update muss der alte Zustand gelöscht werden, anderfalls
                    --würde man ein und die selbe Lehrva mehrfach als Fach eintragen
                    package_fach.insert_fach(old_fachid, item.bezeichnung, item.lehrid);
                    --Hier aufruf der Überladenen Methode package_fach.insert_fachs
                  END IF;
                  --Beim update auf Fach muss die alte Fachid erhalten bleiben
                  
          end loop;
      END IF;--END if updating
     
    END IU_LEHRVER_AFTER_STMT;
     

Ähnliche Themen

  1. Trigger
    Von Chrissy_Love im Forum Relationale Datenbanksysteme
    Antworten: 15
    Letzter Beitrag: 24.06.10, 15:58
  2. MS SQL 2k3 - Mergereplikation - Trigger
    Von DaRealMC im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 08.03.10, 15:52
  3. einfacher Trigger
    Von WenzelPaul im Forum Relationale Datenbanksysteme
    Antworten: 13
    Letzter Beitrag: 15.07.09, 03:18
  4. Trigger in MySQL
    Von NBOne im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 14.08.08, 11:46
  5. Trigger in MS Access
    Von Ste-Re im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 29.08.06, 05:29