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

MS SQL Server Discussion :

[DEBUTANT]Procedure stocké


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut [DEBUTANT]Procedure stocké
    Bonjour je connais pas grand chose en procedure stocké et rien du tout en SQL server .
    Mais malgré tout je cherche a faire une procadure stocké qui doit remplir une table en deux requete la premiere fournit un premier jeu de données et la deuxieme est parcouru avec un CURSOR pour replacé les info sur les lignes deja existante enfin bon voila le code :
    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
     
    CREATE PROCEDURE .initExcel AS BEGIN
    DECLARE 
    	  @cur CURSOR   SELECT * FROM LiteralStrings WHERE Language=2;
    	 @lty INTEGER ;
    	@lc INTEGER;
    	@la INTEGER;
    	@literal  VARCHAR;
    	INSERT INTO Temporaire4Excel (LiteralType,LiteralCode,Language,Literal) SELECT LiteralType,LiteralCode,Language,Literal From LiteralStrings WHERE Language=1;
    	OPEN cur;
                    FETCH NEXT FROM cur
                    WHILE @@FETCH_STATUS = 0
                    BEGIN
                       FETCH  cur INTO lty,lc,la,literal;
                       UPDATE temporaire4Excel set LiteralFR=@literal  WHERE  LiteralType=@lty AND LiteralCode=@lc;
     
                   END
     
    CLOSE cur;
    DEALLOCATE cur;
     
    END;
     
    GO
    Faut etre indulgeant je debute comme je l'ai deja dit et voila l'erreur que j'ai :
    Syntaxe incorrect vers @lty; ligne4 (meme chose ligne 13)
    et @literal doit etre declaré

    d'avance merci
    UML avec VIOLET

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Bon j'ai resolu les probleme de syntaxe mais maintenant c'est a l'executiuon que j'ai des soucis .
    Apparemment je sais pas bien initialiser et pârcourir un CURSOR vous pouviez m'aider avec un exemple simple de parcours de CURSOR en TransacSQL !!
    UML avec VIOLET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    TOut les exemples que j'ai trouvé sont du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DECLARE  @cur CURSOR FOR  SELECT * FROM LiteralStrings WHERE Language=2;
    Mais dans mon cas (SQLServer 2000) cette syntaxe est incorrect !!

    Alors que sans le For la syntaxe est bonne mais a l'executiuon il me dit :

    La variable '@cur' n'a présentement pas de curseur qui lui soit alloué.
    je comprend plus rien !!
    UML avec VIOLET

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Je l'ai amandé un peu pour avoir ceci:
    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
    CREATE PROCEDURE initExcel 
    AS BEGIN 
    DECLARE 
       @cur CURSOR   SELECT * FROM LiteralStrings WHERE Language=2, 
       @lty INT, 
       @lc INT, 
       @la INT, 
       @literal  VARCHAR(8000)
     
    INSERT INTO Temporaire4Excel(LiteralType,LiteralCode,Language,Literal) SELECT LiteralType,LiteralCode,Language,Literal 
    From LiteralStrings 
    WHERE Language=1
     
    OPEN cur 
    FETCH  cur INTO @lty,@lc,@la,@literal
    WHILE @@FETCH_STATUS = 0 
    BEGIN  
         UPDATE temporaire4Excel 
         SET LiteralFR=@literal  
         WHERE  LiteralType=@lty 
         AND LiteralCode=@lc
     
         FETCH  cur INTO @lty,@lc,@la,@literal
    END 
     
    CLOSE cur
    DEALLOCATE cur 
    END
    GO
    Veille à cette présentation, la lisibilité en découle et plus on te répondra à temps.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par FreshVic
    Bon j'ai resolu les probleme de syntaxe mais maintenant c'est a l'executiuon que j'ai des soucis .
    Apparemment je sais pas bien initialiser et pârcourir un CURSOR vous pouviez m'aider avec un exemple simple de parcours de CURSOR en TransacSQL !!
    Bon fondamentalement nous avons ce bout de code :

    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
    -- déclaration des variables de colonnes pour le curseur 
    DECLARE @Col1 Type1, @Col2 Type2, @Col3, Type3... 
    -- declaration du curseur 
    DECLARE MyCursor CURSOR  
    FOR  
       SELECT COL1, COL2, COL3 … 
       FROM MyTable 
     
    -- ouverture du curseur 
    OPEN MyCursor 
     
    -- lecture du premier enregistrement 
    FETCH MyCursor INTO @Col1, @Col2, @Col3... 
     
    -- boucle de traitement 
    WHILE @@fetch_Status = 0 
    BEGIN 
       traitement 
    -- lecture de l'enregistrement suivant 
       FETCH MyCursor INTO @Col1, @Col2, @Col3... 
    END 
     
    -- fermeture du curseur 
    CLOSE myCursor 
     
    -- libération de la mémoire 
    DEALLOCATE myCursor
    Que vous trouverez sur cette page
    Bon bonne chance

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    Bonjour,

    je te propose une méthode plus simple: au lieu du curseur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE temp
     set temp.LiteralFR=lit."champs de LiteralStrings  correpondant à @literal"
    from temporaire4Excel temp INNER JOIN LiteralStrings lit
    ON temp.LiteralType=lit."champs de LiteralStrings  correpondant à @lty" AND temp.LiteralCode=lit."champs de LiteralStrings  correpondant à @lc " 
    WHERE  lit.Language=2
    A+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Voila ce que j'ai maintenant :

    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
     
    CREATE PROCEDURE initExcel 
    AS BEGIN 
       DECLARE  @cur CURSOR   SELECT * FROM LiteralStrings WHERE Language=2;
       DECLARE  @lty INTEGER; 
       DECLARE   @lc INTEGER;
       DECLARE   @la INTEGER;
       DECLARE   @literal  VARCHAR(255) ;
     
       DELETE FROM Temporaire4Excel;
     
    INSERT INTO Temporaire4Excel(LiteralType,LiteralCode,Language,Literal) SELECT LiteralType,LiteralCode,Language,Literal 
    From LiteralStrings 
    WHERE Language=1 
     
       OPEN @cur 
       FETCH  @cur INTO @lty,@lc,@la,@literal 
      WHILE @@FETCH_STATUS = 0 
      BEGIN  
         UPDATE temporaire4Excel 
         SET LiteralFR=@literal  
         WHERE  LiteralType=@lty 
         AND LiteralCode=@lc 
     
         FETCH  @cur INTO @lty,@lc,@la,@literal 
      END 
     
      CLOSE @cur 
      DEALLOCATE @cur 
    END
    GO
    Mais mon probleme est toujours le meme :

    La variable '@cur' n'a présentement pas de curseur qui lui soit alloué.

    je comprend pas d'autant plus que si je declare mon CURSOR comme dans ton exemple:



    DECLARE MyCursor CURSOR
    FOR
    SELECT COL1, COL2, COL3 …
    FROM MyTable
    j'ai une erreur de syntaxe par contre sans le 'FOR ' cela passe tres bien !!!
    UML avec VIOLET

  8. #8
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Très très bien MAMMAR.
    En fait ta méthode non pas plus simple mais plus performante (Rapidité, on évite les boucles ).
    Je n'ai pas proposé à titre pédagogique.
    En effet, il veut comprendre les procedures stockées et les curseurs !!!
    Et il a aussi dit qu'il vient de débuter.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  9. #9
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    Bonjour,

    En effet, il veut comprendre les procedures stockées et les curseurs !!!
    Et il a aussi dit qu'il vient de débuter.
    J'ai compris Laurent ton but.

    pour le nom du curseur, je pense qu'il se declare sans le @:
    cur au lieu de @cur

    A+

  10. #10
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par FreshVic
    Voila ce que j'ai maintenant :

    [code]
    CREATE PROCEDURE initExcel
    AS BEGIN
    DECLARE @cur CURSOR SELECT * FROM LiteralStrings WHERE Language=2;
    j'ai une erreur de syntaxe par contre sans le 'FOR ' cela passe tres bien !!!

    Enlève @ devant le Cur car un curseur est une variable particulière

    [code]
    CREATE PROCEDURE initExcel
    AS BEGIN
    DECLARE cur CURSOR FOR SELECT * FROM LiteralStrings WHERE Language=2;
    [/quote]

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  11. #11
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par FreshVic
    Voila ce que j'ai maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE PROCEDURE initExcel 
    AS BEGIN 
       DECLARE  @cur CURSOR   SELECT * FROM LiteralStrings WHERE Language=2;
    j'ai une erreur de syntaxe par contre sans le 'FOR ' cela passe tres bien !!!

    Enlève @ devant le Cur car un curseur est une variable particulière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE PROCEDURE initExcel 
    AS BEGIN 
       DECLARE  cur CURSOR FOR SELECT * FROM LiteralStrings WHERE Language=2;

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Merci !
    C'est un Merci tardif je vous l'accorde mais MERCI qd meme !!
    UML avec VIOLET

  13. #13
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Pas de problème mon cher ami.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

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

Discussions similaires

  1. [DEBUTANT] Procedure stockée
    Par erigoal dans le forum PL/SQL
    Réponses: 7
    Dernier message: 26/05/2009, 17h13
  2. debutant procedure stockée
    Par nawal106 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 23/10/2006, 10h06
  3. [TSQL][ASE]debutant procedure stocké
    Par agougeon dans le forum Sybase
    Réponses: 6
    Dernier message: 17/07/2006, 08h53
  4. Réponses: 2
    Dernier message: 31/08/2004, 11h45
  5. [Debutant][SQL] Execution de procedures stockées
    Par Yannos94 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 18h09

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