Question

Je suis nouveau dans l'oracle et je ne sais pas ce qui ne va pas avec ce déclencheur:

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;
/

Erreur:

  

PL / SQL: ORA-00904:. "NOUVEAU" "IDPROPUESTA": identifider pas valide

Était-ce utile?

La solution

D'après ce que vous avez décrit:

Essayez de recompiler le déclencheur et voir ce qui se passe ...

Un déclencheur devient invalide si l'objet de base (ex..table) devient invalide ou modifié et le déclencheur se réfère à la table concernée.

Autres conseils

Je ne sais pas pourquoi la réponse acceptée a été acceptée comme ni lui ni les commentaires ci-joints semblent aborder la question évidente dans le code ci-dessous.

Dans un corps de déclenchement nous faisons référence à des valeurs dans la ligne insérée avec le mot de code :NEW. Le code n'a pas affiché le côlon quand il fait référence à la colonne dans la clause WHERE. C'est ce qui est nécessaire:

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;
/

Soit dit en passant, attention à l'aide de minuscules guillemets doubles lors de la création d'objets.

Par défaut, tous les noms Oracle sont stockés dans le dictionnaire de données en majuscules, mais les instructions SQL sont insensibles à la casse. Ainsi, les deux statments ci-dessous se réfèrent au même objet:

select * from emp
/
select * from EMP
/

Cependant, si nous créons notre objet avec un nom en majuscules ou minuscules minuscules et le mettre entre guillemets il est stocké dans le dictionnaire de données avec ce cas précis . Ce signifie que nous devons utiliser ce cas précis à chaque fois que nous faisons référence à l'objet, entre guillemets. Donc, si nous avons créé une table avec tous les minuscules ...

create table "emp"  ...

... alors cette déclaration échouera:

select * from emp
/

Il doit être

select * from "emp"
/

Bien sûr, si nous avons déjà une table appelée EMP puis la première déclaration aurait réussi, si aurait juste sélectionné dans une autre table.

Dans le cas des déclencheurs, nous ne désignons pas les en général par son nom. Mais nous devons utiliser le cas chaque fois que nous regardons le déclencheur dans le dictionnaire de données:

select status
from user_triggers
where trigger_name = 'propuesta_casas'
/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top