Announcement

Collapse
No announcement yet.

Hilfe bei Trigger - Fortsetzung

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

  • Hilfe bei Trigger - Fortsetzung

    Hallo zusammen,

    bei meinem letzten Besuch wurde mir sehr nett und sehr effektiv von Volker Demel geholfen.
    Es hat wunderbar funktioniert und jetzt will ich noch einen Trigger bauen, der einen Wert aus einer 2ten Tabelle holt, d.h. meine Triggertabelle beinhaltet eine Gruppe (Text) und meine 2te Tabelle hat ein Kennzeichen (Zahl). Jetzt möchte ich, dass die Triggertabelle beim Anfügen sich das KZ aus der 2ten Tabelle holt und mit einem DATUM_SUCHFELD verbindet und in ein Tabellenfeld schreibt.

    Tabelle mit Trigger beim Einfügen: vdb_leistung_cr135
    Tabelle mit Info-Daten: vdb_rollen_konzept

    Ich hab auch schon 2 Versuche gestarten, wo mit Oracle einmal sofort und einmal erst beim ausführen mitteilt, dass das Statement falsch ist.

    CREATE OR REPLACE TRIGGER TR_VDB_LEISTUNG_CR135_datsuabt
    before INSERT ON vdb_leistung_cr135
    FOR EACH ROW BEGIN
    :new.DATUMSUCH_ABTEILUNG := SELECT (TO_CHAR (:NEW.DATUM, 'yyyymmdd') ) || VDB_ROLLEN_KONZEPT.ABTEILUNG
    FROM VDB_LEISTUNG_CR135, VDB_ROLLEN_KONZEPT
    WHERE (VDB_LEISTUNG_CR135.FUER_ROLLE = VDB_ROLLEN_KONZEPT.ROLLEN_ID)
    AND (VDB_LEISTUNG_CR135.FUER_ROLLE= :new.fuer_rolle);
    END;
    /
    Warning: Trigger created with compilation errors.

    CREATE OR REPLACE TRIGGER TR_VDB_LEISTUNG_CR135_datsuabt
    before INSERT ON vdb_leistung_cr135
    FOR EACH ROW BEGIN
    SELECT TO_CHAR (:NEW.DATUM, 'yyyymmdd')||VDB_ROLLEN_KONZEPT.ARCOR_ABTEILUNG into :new.DATUMSUCH_ABTEILUNG
    FROM VDB_LEISTUNG_CR135, VDB_ROLLEN_KONZEPT
    WHERE (VDB_LEISTUNG_CR135.FUER_ROLLE = VDB_ROLLEN_KONZEPT.ROLLEN_ID)
    AND (VDB_LEISTUNG_CR135.FUER_ROLLE= :new.fuer_rolle);
    END;
    /

    Trigger created.

    Hier kommen angeblich mehr Werte/Zeilen zurück. (Rollen-Konzept hat nur einmal eine Rolle)

    Könnt Ihr mir ggf. nochmal helfen?
    Bin völlig aufgeschmissen, so ohne Fachleute!
    Schöne Grüße Markus

  • #2
    hallo markus,

    ich glaub du stellst dir selbst ein bein. ich gehe mal davon aus, dass in der ...cr135 mehr als ein satz mit rolle :new.fuer_rolle existiert. wenn du da einen join machst bekommst du natürlich auch alle sätze mit dieser rolle auch wenn du keine spalte der ...cr135 anziehst.

    die erste natürliche reaktion wäre jetzt einfach ein "select distinct ..." zu verwenden. damit würden alle die doppelten sätze verdichtet zu einem und gut is.

    aber warum erst alle finden und dann verdichten? verzichte auf den überflüssigen join und dann sollte es klappen:

    <pre>
    select to_char(...) || acor_abteilung
    from vdb_rollen_konzept
    where rollen_id = :new.fuer_rolle;
    </pre>

    gruss volke

    Comment

    Working...
    X