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/03/2007, 09h54   #1
Invité régulier
 
Inscription : juin 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 24
Points : 6
Points : 6
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 :
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 :
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?
inge2007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 14h36   #2
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Une réponse possible ici.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2007, 11h20   #3
Membre à l'essai
 
Inscription : août 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 47
Points : 21
Points : 21
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 :
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
maKyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2007, 15h00   #4
Membre du Club
 
Inscription : mars 2006
Messages : 92
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 92
Points : 50
Points : 50
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 :
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
Gat- 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 18h44.


 
 
 
 
Partenaires

Hébergement Web