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

DB2 Discussion :

Creer une procedure avec l'éditeur db2


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut Creer une procedure avec l'éditeur db2
    Je susi debutant en db2, j'essaie d'ecrire une procedure stockée sous l'éditeur du control center :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create procedure test(in id int)
    dynamic result sets 1
    language sql
    begin
    declare rs as cursor with return for
    select * from act where actno=id;
    open rs;
    end
    erreur :

    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
     
    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 "m act 
    where actno=id".  Parmi  les marques attendues, on  trouve : 
    "<psm_semicolon>".  LINE NUMBER=6.  SQLSTATE=42601
     
    open rs
    DB21028E Le curseur "RS" n'a pas été déclaré.
     
    end
    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".  
    Parmi  les marques attendues, on  trouve : "JOIN <joined_table>".  
    SQLSTATE=42601
     
    SQL0104N Une marque inattendue "END-OF-STATEMENT" figure à la suite de "end".  Parmi  les marques attendues, on  trouve : "JOIN <joined_table>                              ".
     
    Explication: 
     
    Une erreur de syntaxe dans l'instruction SQL ou dans la chaîne de
    commande d'entrée pour la procédure SYSPROC.ADMIN_CMD a été
    détectée à la marque suivant le texte "<texte>". La zone
    "<texte>" indique les 20 caractères de l'instruction SQL ou de la
    chaîne de commande d'entrée pour la procédure SYSPROC.ADMIN_CMD
    précédant la marque qui n'est pas valide. 
     
     En guise d'aide, une liste partielle de marques correctes est
    fournie dans la zone SQLERRM de la structure SQLCA sous la forme
    "<liste-marques>". Cette liste suppose que l'instruction est
    correcte jusqu'à ce stade. 
     
     L'instruction ne peut pas être traitée. 
     
    Réaction de l'utilisateur: 
     
    Examinez et corrigez l'instruction à proximité de la marque
    indiquée. 
     
     SQLCODE : -104 
     
     SQLSTATE : 42601
    Pourquoi?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Une réponse possible ici.

  3. #3
    Membre averti Avatar de maKyo
    Femme Profil pro
    Chef de projet
    Inscrit en
    Août 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2006
    Messages : 49
    Par défaut
    J'ignore si ça pourra aider mais bon ...

    Pour créer mes sp je passe par l'Iseries Navigator, je me connecte sur la partition, je vais dans la où je dois la créer et j'ouvre un écran "run an SQL script"

    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
    --  Generate SQL 
     
    CREATE PROCEDURE D_PRO_F.KYO ( 
    	IN ZZNCLI INTEGER ) 
    	DYNAMIC RESULT SETS 1 
    	LANGUAGE SQL 
    	SPECIFIC D_PRO_F.KYO 
    	NOT DETERMINISTIC 
    	READS SQL DATA 
    	CALLED ON NULL INPUT 
    	SET OPTION  ALWBLK = *ALLREAD , 
    	ALWCPYDTA = *OPTIMIZE , 
    	COMMIT = *NONE , 
    	DECRESULT = (31, 31, 00) , 
    	DFTRDBCOL = *NONE , 
    	DYNDFTCOL = *NO , 
    	DYNUSRPRF = *USER , 
    	SRTSEQ = *HEX   
     
    	BEGIN 
     
    			DECLARE C1 SCROLL CURSOR WITH RETURN TO CLIENT FOR 
    			SELECT F1 . TPNARG AS TPNARG , F1 . TPNVAC AS TPNVAC , F1 . TPNVLO AS TPNVLO , F1 . TPLLVF AS TPLLVF 
    					FROM D_PRO_F . TVTCATP AS F1 
    					WHERE TPNCLI = ZZNCLI ; 
     
    			OPEN C1 ; 
    			SET RESULT SETS CURSOR C1 ; 
    			END  ;
    En général je met le strict necessaire mais quand il génère le script il rajoute les paramètres "par défaut" en plus dans la déclaration (ALWCPYDTA ,DECRESULT ect ...)
    Mais ça fonctionne nickel.

    maKyo

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 92
    Par défaut
    J'ai eu le même problème.

    En fait dans le centre de contrôle, il y a tout en bas un champ qui te permet de modifier le caractère de fin d'instruction.
    Par défaut la valeur de ce champ est un point virgule ';'. Change cette valeur en mettant un '#'.
    Ensuite relance ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE test(IN id INT)
        DYNAMIC RESULT SETS 1
        LANGUAGE SQL
    BEGIN
        DECLARE rs CURSOR WITH RETURN FOR
            SELECT * FROM act WHERE actno=id;
        OPEN rs;
    END

Discussions similaires

  1. Creer une DLL avec des icônes
    Par Larion dans le forum C++Builder
    Réponses: 5
    Dernier message: 13/03/2005, 17h28
  2. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24
  3. Creer une requete avec des LEFT JOIN et des GRO
    Par donbuz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2004, 15h53
  4. [MFC] creer une liste avec des check????
    Par ginounet dans le forum MFC
    Réponses: 4
    Dernier message: 16/06/2004, 11h47
  5. Execution d'une procedure avec TNotifyEvent;
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2003, 14h50

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