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 :

Pb de trigger sous SQL+, Oracle10g


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut Pb de trigger sous SQL+, Oracle10g
    Bonjour,

    J'ai un petit soucis avec un trigger que j'ai créé.
    SQL+ me renvoie le resultat suivant :
    Avertissement : Déclencheur créé avec erreurs de compilation.
    Ce trigger est sensé vérifié si un étudiant rempli les prérequis pour s'inscrire dans un module, c'est à dire, il doit avoir la moyenne attendue dans le module précédent et il faut qu'il y ait encore de la place.
    J'ai beau chercher, je ne vois pas d'où vient le problème.
    Je travail sous xp/virtualbox 2.2 et Oracle 10g.
    Si quelqu'un pouvait me donner un petit coup de main, ça me serait très utile.
    D'avance merci à tous.

    Voici le code de mon trigger:

    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
    24
    25
    26
    27
    28
    29
    30
    create or replace trigger verif_valid_prereq
    	before update on inscription
    	for each row
    declare
    	v_num	number :=0;
    	v_codm	varchar2(8);
    	v_compt	number;
    	v_moy	number := 0;
    begin
    	select :new.numetud into v_num from inscription;
    	select codmodprereq into v_codm from prerequis
    		where codmodprereq = :new.codmod;
    	select count(codexam) into v_compt from examen
    		where codmod = v_codm;
    	if ((select count(note) from resultat
    	where numetud = v_num and codmod = v_codm) = v_compt) then
    	select round(avg(note),2) into v_moy from resultat
    	where numetud = v_num and codmod = v_codm;
    	if ((select noteprereq from prerequis
    	where codmodprereq = v_codm)<v_moy )
    			raise erreur;
    	end if;
    	else raise erreur;
    	end if;
    exception
    	when erreur then Raise_application_error(-20114,
    	'Cet etudiant ne remplie pas les conditions pour s inscrire au 
    	module '||:new.codmod);
    end;
    /

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Après le message "Avertissement : Déclencheur créé avec erreurs de compilation.", tapez
    Vous aurez la ligne et l'erreur en question.

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Show errors;
    pour voir les erreurs

    Un trigger est une procédure PL/SQL, donc essaye de lancer ce code en tant que procédure PL/SQL, tu vas tout de suite voir ce qui va pas.

  4. #4
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	IF ((SELECT noteprereq FROM prerequis
    	WHERE codmodprereq = v_codm)<v_moy )
    			raise erreur;
    	end IF;
    Je penche pour un "then" oublié.

  5. #5
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut
    Bonsoir et merci pour vos reponses,

    Concernant le then manquant, je m'en étais rendu compte et l'avais modifié mais aucun changement.

    J'ai tapé la commande show errors et j'obtient le resultat suivant :

    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
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    10/7     PLS-00103: Symbole "SELECT" rencontré à la place d'un des
             symboles suivants :
             ( - + case mod new not null others <identificateur>
             <identificateur entre guillemets> <variable bind> avg count
             current exists max min prior sql stddev sum variance execute
             forall merge time timestamp interval date
             <un littéral de chaîne avec spécification de jeu de caractères>
             <un nombre> <une chaîne SQL entre apostrophes> pipe
             <constante de chaîne éventuellement entre guillemets avec
             indication du jeu de c
     
    10/81    PLS-00103: Symbole ")" rencontré à la place d'un des symboles
             suivants :
             . ( * @ % & - + ; / at for mod remainder rem <exposant (**)>
             and or group having intersect minus order start union where
             connect || multiset
    J'ai donc regardé ce qui ne va pas avec la ligne 10 mais j'ai beau chercher, je ne vois toujours pas où est le probleme.

  6. #6
    Expert confirmé 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
    Par défaut
    Si tu ne vois pas où est l'erreur avec ce morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IF ((SELECT count(note) FROM resultat
    	WHERE numetud = v_num AND codmod = v_codm) = v_compt) then
    il faut reviser un peu la syntaxe du PL/SQL avant de continuer à écrire des programmes.

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par mnitu Voir le message
    il faut reviser un peu la syntaxe du PL/SQL avant de continuer à écrire des programmes.
    Franchement Mnitu, ce genre de réponse très vague et qu'on peut ressentir comme méprisante n'apporte rien.

    Souligner la portion de code fautive comme vous l'avez fait est bien suffisant si vous souhaitez ne pas donner la solution toute cuite.

Discussions similaires

  1. Création de trigger sous SQL Server 2008
    Par lessoy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/04/2013, 12h49
  2. Trigger sous SQL-Server
    Par momedalhouma dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/02/2012, 16h46
  3. Tester la performance d'un trigger sous SQL Server 2008
    Par lerieure dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/02/2011, 18h04
  4. Réponses: 20
    Dernier message: 15/05/2009, 14h05
  5. Optimisation Trigger sous SQL Serveur 2000
    Par Silvia12 dans le forum Développement
    Réponses: 3
    Dernier message: 30/05/2007, 18h26

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