[oracle] pb trigger pl/sql

pb trigger pl/sql [oracle] - SQL/NoSQL - Programmation

Marsh Posté le 06-11-2005 à 16:22:17    

(j'ai supprimé un ancien topik sur des types date)
 
j'ai un pb avec un trigger (le premier de ma vie)
 
j'ai plusieurs tables dont:
 

CREATE TABLE CINEMA (
NOM_CI VARCHAR2(50) NOT NULL,
COMPAGNIE_CI VARCHAR2(50) NOT NULL,
ADRESSE_CI VARCHAR2(150) NOT NULL,
VILLE_CI VARCHAR2(50) NOT NULL,
TELEPHONE_CI VARCHAR2(15) NOT NULL,
CONSTRAINT PK_CINEMA primary key (NOM_CI));


CREATE TABLE FILM (
TITRE VARCHAR2(150) NOT NULL,
ANNEE INTEGER  CHECK( ANNEE BETWEEN 1800 AND 2050),
SYNOPSIS CLOB ,
DUREE INTEGER CHECK( DUREE > 0),
GUIDE_PARENTAL VARCHAR2(50),
COIMPAGNIE VARCHAR2(50),
CONSTRAINT PK_FILM primary key (TITRE));]


CREATE TABLE HORAIRE(
NOM_CI VARCHAR2(50) NOT NULL,
TITRE VARCHAR2(50) NOT NULL,
DATE_DEBUT DATE NOT NULL,
HEURE DATE NOT NULL,
DATE_FIN DATE NOT NULL,
CONSTRAINT PK_HORAIRE PRIMARY KEY (NOM_CI,TITRE,DATE_DEBUT,HEURE),
CONSTRAINT FK_HORAIRE_NOM_CI foreign key (NOM_CI) references CINEMA (NOM_CI),
CONSTRAINT FK_HORAIRE_TITRE foreign key (TITRE) references FILM (TITRE)
);


 
je souhaite créer un trigger qui vérifié qu'il n'y a pas de conflit d'horaires pour un même film dans un même cinéma

CREATE TRIGGER ach
BEFORE INSERT OR UPDATE ON HORAIRE
FOR EACH ROW
DECLARE
chevauchementBool NUMBER;
chevauchementException EXCEPTION;
BEGIN
 
SELECT COUNT(*) INTO chevauchementBool FROM HORAIRE,FILM
 WHERE Nom_ci=:new.Nom_ci  
 AND Titre=:new.Titre AND (  
 (   :new.heure BETWEEN heure AND heure+Film.duree*(1/(24*60))  )
 OR
 (   :new.heure+Film.duree*(1/(24*60)) BETWEEN heure AND heure+Film.duree*(1/(24*60))  )
 );
 
IF chevauchementBool != 0 THEN
 RAISE chevauchementException;
END IF;
EXCEPTION
WHEN chevauchementException THEN
 raise_application_error(-20000,'conflit');
END;
/


j'ai les erreurs suivantes que je ne comprend pas

SQL> show errors trigger ach;
Errors for TRIGGER ACH:
 
LINE/COL
--------------------------------------------------------------------------------
ERROR
--------------------------------------------------------------------------------
6/1
PL/SQL: SQL Statement ignored
 
8/6
PL/SQL: ORA-00918: column ambiguously defined
 


 
un idée ? :??:


Message édité par farib le 06-11-2005 à 16:22:59
Reply

Marsh Posté le 06-11-2005 à 16:22:17   

Reply

Marsh Posté le 06-11-2005 à 17:53:11    

Le champ Titre est à la fois dans la table FILM et dans la table HORAIRE, donc dans ton SELECT COUNT(*) il faut préfixer ;)

Reply

Marsh Posté le 06-11-2005 à 18:34:45    

effectivement, c'est passé.
 
Va savoir pourquoi, ça m'a viré l'érreur du "statement ignored"

Reply

Marsh Posté le 06-11-2005 à 18:58:41    

Tout était lié, il faut lire la liste d'erreurs à l'envers il me semble, la requête était ignorée à cause de la colonne non aliasée.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed