Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/05/2006, 16h50   #1
Invité de passage
 
Inscription : mai 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 3
Points : 0
Points : 0
Par défaut Problème avec les délimiteurs dans un trigger

Bonjour à tous.

Voilà le trigger que j'ai mis dans un fichier :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TRIGGER LISTE_MODULES_OBL
    AFTER INSERT ON CONTRATS
    REFERENCING NEW AS N
    FOR EACH ROW
    BEGIN
        FOR RES AS
            SELECT ID_MODULE
            FROM FORMATIONS_MODULES
            WHERE ID_FORMATION = N.ID_FORMATION
            AND TYPE_MODULE = 1
        DO
            INSERT INTO CONTRATS_MODULES
            (ID_MODULE, ID_CONTRAT)
            VALUES (RES.ID_MODULE, N.ID_CONTRAT);
        END FOR;
    END
Et voilà les erreurs que je me prends lorsque j'importe le fichier (db2 -tf "TRIGGERS.SQL") :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
pas d'une commande valide pour l'interpréteur de commandes.  Le message SQL
suivant a été renvoyé lors de son traitement :
SQL0104N Une marque inattendue "RES" figure à la suite de "BEGIN         FOR".
Parmi  les marques attendues, on  trouve : "JOIN".  LINE NUMBER=6.
SQLSTATE=42601
 
DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
pas d'une commande valide pour l'interpréteur de commandes.  Le message SQL
suivant a été renvoyé lors de son traitement :
SQL0104N Une marque inattendue "END-OF-STATEMENT" figure à la suite de "END
FOR".  Parmi  les marques attendues, ON  trouve : "JOIN <joined_table>".
SQLSTATE=42601
 
DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
pas d'une commande valide pour l'interpréteur de commandes.  Le message SQL
suivant a été renvoyé lors de son traitement :
SQL0104N Une marque inattendue "END-OF-STATEMENT" figure à la suite de "END
TERMINATE".  Parmi  les marques attendues, on  trouve : "JOIN <joined_table>".
SQLSTATE=42601
J'ai installé le DB2 Express-C gratuit pour Windows. J'ai d'autres triggers avec lesquels j'ai eu des problèmes : en fait dès que je mets autre chose que WHEN (....) SQLSTATE '....' (.....); (par exemple si je place tout dans un bloc BEGIN ... END) j'ai des erreurs du type celles ci-dessus.

Edit : je précise que j'ai fait un copier/coller d'un trigger par défaut de DB2 (POLICY_DR je crois) que j'ai ensuite importé et j'ai des erreurs du même type ; il doit certainement y avoir un truc qui m'échappe.

Pouvez-vous m'aider SVP ?
Dost67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2006, 19h18   #2
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Je ne sais pas si cela va résoudre ton problème mais il me semble qu'il ne faut pas le ; derrière le End For
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2006, 20h19   #3
Invité de passage
 
Inscription : mai 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 3
Points : 0
Points : 0
Citation:
Envoyé par jab
Je ne sais pas si cela va résoudre ton problème mais il me semble qu'il ne faut pas le ; derrière le End For
Ca ne change rien, toujours le même type d'erreur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
pas d'une commande valide pour l'interpréteur de commandes.  Le message SQL
suivant a été renvoyé lors de son traitement :
SQL0104N Une marque inattendue "END-OF-STATEMENT" figure à la suite de "ODULE,
N.ID_CONTRAT)".  Parmi  les marques attendues, on  trouve :
"<delim_semicolon>".  LINE NUMBER=14.  SQLSTATE=42601
 
DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
pas d'une commande valide pour l'interpréteur de commandes.  Le message SQL
suivant a été renvoyé lors de son traitement :
SQL0104N Une marque inattendue "FOR" figure à la suite de "END ".  Parmi  les
marques attendues, ON  trouve : "JOIN <joined_table>".  SQLSTATE=42601
Dost67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2006, 20h41   #4
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Et quelque chose comme cela ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE TRIGGER LISTE_MODULES_OBL
    AFTER INSERT ON CONTRATS
    REFERENCING NEW AS N
    FOR EACH ROW
    BEGIN ATOMIC
        WITH RES AS
         (SELECT ID_MODULE
            FROM FORMATIONS_MODULES
            WHERE ID_FORMATION = N.ID_FORMATION
            AND TYPE_MODULE = 1
         )
        INSERT INTO CONTRATS_MODULES
            (ID_MODULE, ID_CONTRAT)
            VALUES (RES.ID_MODULE, N.ID_CONTRAT);
    END
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2006, 22h53   #5
Invité de passage
 
Inscription : mai 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 3
Points : 0
Points : 0
Merci de ton aide. Mais toujours pareil
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
pas d'une commande valide pour l'interpréteur de commandes.  Le message SQL
suivant a été renvoyé lors de son traitement :
SQL0104N Une marque inattendue "CONTRATS_MODULES" figure à la suite de "
INSERT INTO".  Parmi  les marques attendues, on  trouve : "<space>".  LINE
NUMBER=12.  SQLSTATE=42601
 
DB21034E La commande a été traitée comme une instruction SQL car il ne s'agit
pas d'une commande valide pour l'interpréteur de commandes.  Le message SQL
suivant a été renvoyé lors de son traitement :
SQL0104N Une marque inattendue "END-OF-STATEMENT" figure à la suite de "END
TERMINATE".  Parmi  les marques attendues, ON  trouve : "JOIN <joined_table>".
SQLSTATE=42601
J'ai pas l'impression que le problème viennent d'une erreur de syntaxe car ce trigger fonctionne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TRIGGER NB_MODULES_MAX
    NO CASCADE BEFORE
    INSERT ON CONTRATS_MODULES
    REFERENCING NEW AS N
    FOR EACH ROW MODE DB2SQL
    WHEN (
          (SELECT COUNT(*)
           FROM CONTRATS_MODULES
           WHERE ID_CONTRAT = N.ID_CONTRAT) + 1 >
          (SELECT NB_MODULES
           FROM FORMATIONS
           WHERE ID_FORMATION = (SELECT ID_FORMATION
                                 FROM FORMATIONS
                                 WHERE ID_CONTRAT = N.ID_CONTRAT))
         )
    SIGNAL SQLSTATE '85101'
        ('Nombre de modules maximum atteint pour ce contrat.');
Par contre si j'ai le malheur d'encercler le SIGNAL STATE d'un BEGIN ... END je me reprends le même type d'erreur. Il y a un truc que je comprends pas.
Dost67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h23.


 
 
 
 
Partenaires

Hébergement Web