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

Langage SQL Discussion :

[Trigger] Problème de curseur


Sujet :

Langage SQL

  1. #1
    Membre averti
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Points : 405
    Points
    405
    Par défaut [Trigger] Problème de curseur
    Bonjour,
    Dans un trigger, j'ai un curseur qui plante sue le premier FETCH NEXT FROM
    J'ai le message d'erreur suivant :
    "Erreur interne du processeur de requêtes : Le processeur de requêtes ne prend pas en charge la routine d'exécution appelée."

    Voici mon curseur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DECLARE CurseurStage CURSOR  FOR
    	SELECT cleform16, cleform32 FROM For_migration WHERE cleform32 = (SELECT cp_typestage FROM inserted)				
    OPEN CurseurStage
    FETCH NEXT FROM CurseurStage into @cleform16,@cleform32
    WHILE @@FETCH_STATUS = 0			
    BEGIN
    	SET @nb= (SELECT COUNT(cleform32)  FROM For_migration WHERE cleform16 = @cleform16)
     
    	IF (@nb = 1 )
    		BREAK
    	FETCH NEXT FROM CurseurStage
    END
    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Quelle horreur ...

    Bon alors rectifions tout cela

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    -- 1) manque les déclaration des variables de recup 
     
    DECLARE @cleform16 ???(type)
     
    DECLARE @cleform32 ???(type)
     
    -- 2) écriture de requête dégueulasse
    DECLARE CurseurStage CURSOR  
    FOR
    /*
       SELECT cleform16, cleform32 
       FROM For_migration 
       WHERE cleform32 = (SELECT cp_typestage 
                          FROM inserted)
    */
     
    -- non !
     
       SELECT cleform16, cleform32 
       FROM   For_migration M
              INNER JOIN inserted i
                    ON M.cleform32 = i.cp_typestage 
     
    -- oui !
     
    OPEN CurseurStage
     
    -- 3) cette syntaxe n'existe pas
    /*
    FETCH NEXT FROM CurseurStage into @cleform16,@cleform32 
    */
    -- la correction
    FETCH CurseurStage INTO @cleform16, @cleform32
     
    WHILE @@FETCH_STATUS = 0         
    BEGIN
    -- 4) syntaxe incorrecte
    /*
       SET @nb= (SELECT COUNT(cleform32)  FROM For_migration WHERE cleform16 = @cleform16)
    */
       SELECT @nb=COUNT(cleform32)  
       FROM For_migration 
       WHERE cleform16 = @cleform16)
     
       IF (@nb = 1 )
          BREAK
     
       FETCH NEXT FROM CurseurStage
    END
    Enfin : je ne comprends pas le but qui a mon avis pourrait être simplifié par une seule requête et sans curseur...

    PS : s'agit-il bien de code TRansact SQL de MS SQL Server ?

  3. #3
    Membre averti
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Points : 405
    Points
    405
    Par défaut
    Désolé pour l'horreur mais je débute à peine avec les trigger et je galère quelque peu

    Merci pour ta réponse SQLPro, je vais aller tester toutes tes modifs et je te tiens au courant . Tu avais bien reconnu, c'est bien du MS SQL SERVER.

    D'ailleurs puisque je te tiens aurait tu une doc ou un lien qui explique les trigger sous SQL Server, afin que j'essayes d'éviter de nouvelles horreurs.

    Merci d'avance
    Steve

  4. #4
    Membre averti
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Points : 405
    Points
    405
    Par défaut
    Voila tout marche nickel!
    Je tiens à préciser que je n'avais pas marqué la déclaration de variable pour simplifier mon exemple
    Le but était de renvoyer parmi toutes les cleforms16 de la table For_migration celle qui avait exactement un et un seul enreg qui correspondait à cleform32.
    Donc oui on aurait peut-etre pu se passer de curseur.
    Encore Merci.

    Steve
    P.S: par contre je suis toujours interressé par une doc parce que je crois que j'ai du boulot pour me mettre à niveau de Mr SQLPro

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/03/2008, 12h36
  2. Problème de Curseur
    Par chremy dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/07/2006, 19h17
  3. [trigger] problème de mise à jour
    Par Ouark dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/03/2006, 02h13
  4. [MSDE] Problème de curseur dans une SP
    Par papouAlain dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/07/2005, 12h28
  5. Calcul dans un triggers : problème du +
    Par eXiaNazaire dans le forum Oracle
    Réponses: 3
    Dernier message: 07/01/2005, 11h14

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