Frage

Ich bin neu in Oracle und ich weiß nicht, was mit diesem Trigger falsch ist:

CREATE OR REPLACE TRIGGER  "propuesta_casas" 
BEFORE INSERT ON "PROPUESTA_TIENDA_BARRIO"
FOR EACH ROW
 WHEN (new."CASASCAL" IS NULL) 
 BEGIN
    SELECT PROPUESTA.CASAS
    INTO :new."CASASCAL"
    FROM PROPUESTA WHERE PROPUESTA.IDPROPUESTA=new.IDPROPUESTA ;
 END;
/

Fehler:

  

PL / SQL: ORA-00904:. "NEW" "IDPROPUESTA": identifider nicht gültig

War es hilfreich?

Lösung

Von dem, was Sie beschrieben:

Versuchen Sie, den Trigger neu zu kompilieren und sehen, was passiert ...

Ein Trigger wird ungültig, wenn das Basisobjekt (ex..table) ungültig wird oder verändert werden und der Auslöser bezieht sich auf die betroffene Tabelle.

Andere Tipps

Warum nicht sicher, dass die akzeptierte Antwort wird akzeptiert, da weder sie noch die beigefügten Bemerkungen scheinen die offensichtliche Frage in dem von ihm entsandten Code zu adressieren.

in einem Trigger Körper verweisen wir Werte in der eingefügten Zeile mit dem :NEW Codewort. Der entsandte Code fehlt der Doppelpunkt, wenn es um die Spalte in der WHERE-Klausel verweist. Dies ist, was gebraucht wird:

CREATE OR REPLACE TRIGGER  "propuesta_casas" 
BEFORE INSERT ON "PROPUESTA_TIENDA_BARRIO"
FOR EACH ROW
 WHEN (new."CASASCAL" IS NULL) 
 BEGIN
    SELECT PROPUESTA.CASAS
    INTO :new."CASASCAL"
    FROM PROPUESTA 
    WHERE PROPUESTA.IDPROPUESTA=:new.IDPROPUESTA ;
 END;
/

Im Übrigen achten Sie auf Kleinbuchstaben in doppelten Anführungszeichen beim Erstellen von Objekten.

Standardmäßig werden alle Oracle-Namen werden im Data Dictionary in Großbuchstaben gespeichert, aber die SQL-Anweisungen sind Groß- und Kleinschreibung. So die beiden folgenden statments beziehen sich auf das gleiche Objekt:

select * from emp
/
select * from EMP
/

Wenn wir jedoch unser Objekt mit einem Namen in gemischten Groß- oder Kleinschreibung erstellen und sie in doppelten Anführungszeichen setzen es in den Daten gespeichert ist, Wörterbuch mit dem genauen Fall . Diese Mittel müssen wir diesen genauen Fall verwenden, wenn wir das Objekt, in doppelten Anführungszeichen verweisen. Also, wenn wir eine Tabelle mit Kleinbuchstaben erstellt ...

create table "emp"  ...

... dann wird diese Aussage nicht:

select * from emp
/

Es muss sein

select * from "emp"
/

Natürlich, wenn wir schon einen Tisch haben, dann genannt EMP die erste Anweisung gelungen wäre, wenn würde nur aus einer anderen Tabelle ausgewählt hat.

Im Fall von Triggern wir ihnen im Allgemeinen nicht mit Namen beziehen. Aber wir haben den Fall verwenden, wenn wir den Auslöser im Data Dictionary nachschlagen:

select status
from user_triggers
where trigger_name = 'propuesta_casas'
/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top