Announcement

Collapse
No announcement yet.

Trigger ORA-04098

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

  • Trigger ORA-04098

    Hallo,

    ich bin langsam am verzweifeln. Schon seit 2 tagen versuche ich einen ganz einfachen Trigger zu erstellen.

    Ich benutze Oracle 8.1.7 Datenbank.

    Ich möchte in dier HCN Datenbank in der RM Tabelle so was wie ein Logbuch führen. Jedes mal wenn jemand eine Datensatz ändert soll in die Spalten:

    modified_on_date := sysdate - Systemdatum
    modified_by_username := user - Der Benutzer

    eingetragen werden. Dazu habe ich folgenden Code geschrieben:

    create or replace trigger hcn.last_update
    after update on hcn.rm
    for each row
    begin
    :new.modified_on_date := sysdate;
    :new.modified_by_username := user;
    end;

    Leider kommt in der SQLPlus Worksheet Konsole folgende Fehlermeldung:

    Warnung: Trigger wurde mit Kompilierungsfehlern erstellt.

    PS. Hinter dem ‚ ; ’ sind alle Leerzeichen gelöscht.

    Und wenn ich: show errors trigger hcn.last_update; eingebe, dann gibt er mir:

    Keine Fehler.

    Gut. Wenn ich jetzt in der Datenbank einen Datensatz ändere, dann gibt es folgende Fehlermeldung:

    Server-Fehler : ORA-04098: Trigger 'HCN.LAST_UPDATE' ist ungültig und konnte nicht neu bestätigt werden

    Datensatz:
    bl_id = <1>
    fl_id = <EG>
    rm_id = <001>
    area = <0>
    area_manual = <0>
    rm_cat = <HHNF>
    dwgname = <>
    ehandle = <>
    dv_id = <>
    dp_id = <>
    rm_type = <>
    rm_std = <>
    layer_name = <>
    length = <0>

    Alter Hauptschlüssel:
    <1><EG><001>

    Gruß vitali

  • #2
    Okay die Tabelle ist einbißchen groß deswegen habe ich eine kleine Tabelle gemacht.

    Datenbank: hcn
    Tabellenname: test

    Felder:
    name char(20)
    modified_by_username char(64)

    dann habe ich die Tabelle mit einem Wert gefühlt.

    insert into hcn.test (name) values ('1');

    und den Trigger erstellt.

    create or replace trigger hcn.last_update
    after update on hcn.test
    for each row
    begin
    :new.modified_by_username := user
    end;

    wieder diese Fehlermeldung:

    Warnung: Trigger wurde mit Kompilierungsfehlern erstellt.

    Dann habe ich den Datensatz geändert:

    update hcn.test
    set name = '2'
    where name = '1';

    Dann kamm diese Fehlermeldung mit show errors:

    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    3/1 PLS-00103: Fand das Symbol "END" als eines der folgenden erwartet
    wurde:
    . ( * @ % & = - + ; < / > at in mod not rem
    <an exponent (**)> <> or != or ~= >= <= <> and or like
    between is null is not || is dangling
    Das Symbol ";" ersetzte "END", um fortzufahren.

    Gut dann habe ich den ";" mit "END" ersetzt. Mein Trigger Code sieht jetzt so aus:

    create or replace trigger hcn.last_update
    after update on hcn.test
    for each row
    begin
    :new.modified_by_username := user
    ;

    Dann kommt diese Fehlermeldung:

    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    4/0 PLS-00103: Fand das Symbol "end-of-file" als eines der folgenden
    erwartet wurde:
    begin declare end exception exit for goto if loop mod null
    pragma raise return select update while <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall
    <a single-quoted SQL string>

    Jetzt weiß aber echt nicht mehr weiter???

    Gruß Vital

    Comment


    • #3
      Hallo

      diese Problem konnte zwar nicht lösen, aber dafür meine Aufgabe.

      Es wäre schön zu wissen wieso der trigger bei mir nicht funktioniert hat, aber es nicht so dringend.

      Schönes Forum haben ihr ;-) und ich denke ich komme euch öfter besuchen.

      mfg Vital

      Comment


      • #4
        Hallo Vitali

        was soll ein Trigger AFTER Update denn noch in den Werten new. ändern??
        Wenn Du die New Werte vor dem Update änderst, sollte der Trigger laufen.
        Also versuchs mal mit
        ...
        BEFORE Update
        oder Du kannst sogar den Trigger auf Insert erweitern:
        BEFORE insert or update ...

        ...

        Eckar

        Comment

        Working...
        X