Trigger - Before insert - Feldinhalt aus einer anderen Datenbank

warface

Mitglied
Hallo zusammen,

ich versuche einen Trigger zu erstellen bei dem ein Feld mit dem Feldinhalt aus einer Tabelle in einer anderen Benutzer/Instanz befüllt werden soll.

SQL:
create or replace trigger SYSTEM1."KOSTST_UPDATE" BEFORE INSERT
    ON SYSTEM1.AUFTRAG
    FOR each ROW WHEN (:new.Bestnr > '700000' and :new.Bestnr < '800000')

DECLARE
    KST NUMBER;
BEGIN
    SELECT KOSTENSTELLE INTO KST
    FROM SYSTEM2.AUFTRAG
    WHERE BESTELLNR = :new.bestnr;

    CASE
        WHEN :new.kostst is null THEN :new.kostst := KST;

    END CASE;
END;

Leider mache ich hier etwas falsch, sehe aber den Fehler nicht.
Über einen Tipp würde ich mich sehr freuen :)
 
@Yaslaw es handelt sich um eine Oracle-Datenbank

Fehlerbericht -
ORA-25000: Unzulässige Verwendung der Bind-Variable in WHEN-Klausel des Triggers
25000. 00000 - "invalid use of bind variable in trigger WHEN clause"
*Cause: A bind variable was used in the when clause of a trigger.
*Action: Remove the bind variable. To access the table columns use
(new/old).column_name.

Danke schon mal im voraus :)
 
Ersetze den case when durch einen if
Case When gibt normalerwese einen Wert zurück und ist mWn nur mässig geeignet um darin einen Code auszuführen
SQL:
IF :NEW.kostst IS NULL THEN
    :NEW.kostst := KST;
END IF;
Oder einfach ein NVL anwenden
SQL:
:NEW.kostst := NVL(:NEW.kostst, KST);
 
@Yaslaw hatte ich auch schon getestet, die Fehlermeldung erscheint dann immer noch.
Darauf hab ich mal den Eintrag
SQL:
FOR each ROW WHEN (:NEW.Bestnr > '700000' AND :NEW.Bestnr < '800000')

in

SQL:
FOR each ROW

geändert.

dann Bekomme ich die folgenden Fehlermeldungen, obwohl die Tabellen vorhanden sind.
  • Fehler(4,5): PL/SQL: SQL Statement ignored
  • Fehler(5,19): PL/SQL: ORA-00942: Tabelle oder View nicht vorhanden
 
die haben ich.
bevor ich mit dem Trigger angefangen habe, habe ich erst einmal einen Select-Befehl gemacht.

SQL:
select
    bestnr,
    kostst,
    (select KOSTENSTELLE from SYSTEM2.Auftrag where BESTELLNR =e100.bestnr)
from
    SYSTEM1.Auftrag
where
    bestnr between '700000' and '800000'
 

Neue Beiträge

Zurück