IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Erreur sur un déclencheur


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut Erreur sur un déclencheur
    Salutation;

    j'ai crée un déclencheur, celui ci se crée bien sans erreurs de compilation (je sais pas si on peut vraiment dire compilation pour du pl/sql) ^^


    Du coup après j'ai voulu tester mon déclencheur en faisant une modification.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE Creneau
     SET TENS='TDM'
     WHERE idCren=1;
    Et j'obtiens alors le message suivant

    UPDATE Creneau
    *
    ERREUR à la ligne 1 :
    ORA-04091: la table CRENEAU est en mutation ; le déclencheur ou la fonction ne peut la voir
    ORA-06512: à "VERIFFIRSTENSEIGN", ligne 2
    ORA-04088: erreur lors d'exécution du déclencheur 'VERIFFIRSTENSEIGN'


    Voici le code de mon déclencheur plus en détail; le but étant d'empêcher que le premier créneau d'un cours soit un TDM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    create or replace TRIGGER VERIFFIRSTENSEIGN BEFORE INSERT OR UPDATE ON Creneau for each ROW
    BEGIN
    	for c1_ligne in (select * from Creneau where DateC=(select min(DateC) from creneau) 
    	and HDEB=(select min(HDEB) from creneau) 
    	and IdCren=(select min(IdCren) from creneau)
    	and IdMat=:NEW.IdMat and IdGrp=:NEW.IdGrp) loop 
    	if(c1_ligne.IdCren=:NEW.IdCren) then 
    		DBMS_OUTPUT.PUT_LINE('Modification premier creneau' ||c1_ligne.IdCren);
    		if(:NEW.TENS='TDM') then
    			RAISE_APPLICATION_ERROR ( -20010, 'Creneau invalide' ) ;
    		end if;
    	end if;
    	if(:NEW.DateC <= c1_ligne.DateC) then
    		if(:NEW.HDEB <= c1_ligne.HDEB) then 
    			if(:NEW.TENS='TDM') then
    				RAISE_APPLICATION_ERROR ( -20010, 'Creneau invalide' ) ;
    			end if;
    		end if;
    	end if;
    	end loop;
    	END;
    	/

    Si j'en crois mon message d'erreur il me dit qu'il ne peut pas voir creneau parce qu'il est en mutation...je suis bien d'accord mais je croyais que faire un déclencheur le permettrait de contourner ce problème de mutation è_é

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je vous recommande de lire d'abord ce tutoriel sur le triggers "Triggers Considered Harmful, Considered Harmful"

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par Amnael Voir le message
    le but étant d'empêcher que le premier créneau d'un cours soit un TDM
    C'est bien compliqué ce que vous essayez de faire.
    Comment définissez-vous qu'un créneau est le premier créneau ?

Discussions similaires

  1. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00
  2. [VBS] Erreur sur "AddWindowsPrinterConnection"
    Par Admin dans le forum VBScript
    Réponses: 5
    Dernier message: 27/03/2004, 16h15
  3. Erreur sur serveur lié
    Par k-lendos dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/03/2004, 15h21
  4. []Erreur sur second emploi collection binding
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/03/2004, 18h02
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo