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 26/05/2005, 12h29   #1
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 64
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 64
Points : 25
Points : 25
Par défaut [DB2] SQL dynamique pour déclarer un curseur

Bonjour, je voudrais savoir s'il est possible de déclarer, dans une procédure stockée, un curseur via du SQL dynamique. C'est nécessaire puisque je passe en paramètres de la procédure stockée les infos du curseur.
Par exemple :

SET TEXTE = ' DECLARE CURSEUR CURSOR FOR SELECT * FROM ' || @TABLE ;
EXECUTE IMMEDIATE TEXTE;

C'a n'a pas l'air de marcher donc est ce qu'il existe une solution pour déclarer un curseur dont la table ou d'autres infos le concernant sont passés en paramètres.

Merci
Fatah93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 11h37   #2
Membre habitué
 
Inscription : juin 2004
Messages : 212
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 212
Points : 118
Points : 118
Je sais que ce sujet est très vieux mais je pense avoir trouvé une réponse :

Si on passe en paramètre de la procedure stockée un paramètre nécessaire dans la requête du curseur on peut faire :

Code :
1
2
3
4
5
6
 
CREATE procedure test(IN var varchar(15))
LANGUAGE sql
begin
declare cur CURSOR FOR SELECT champ1 FROM matable WHERE champ2=var;
.............
Le curseur prends bien en compte la variable VAR qui est passé en paramètre.

Si c'est bien sûr ça que tu appel curseur dynamique!
yoyopi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 11h19   #3
Membre régulier
 
Avatar de delas
 
Inscription : avril 2004
Messages : 100
Détails du profil
Informations personnelles :
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : avril 2004
Messages : 100
Points : 72
Points : 72
Et apres, je parcour mon curseur mais comment je fais pour sortir de la boucle. est-ce qu(il existe quelque chose du genre while curqsor.hasmoreElement

?
delas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 13h06   #4
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
Par défaut Prepare

Il vaut mieux passer par une instruction SQL PREPARE.
Un exemple simple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE procedure test(IN MaTable varchar(15))
LANGUAGE sql
BEGIN
DECLARE stmt varchar(128);
DECLARE CSR CURSOR FOR sqlstm;
SET stmt = 'SELECT ... FROM '  CONCAT  MaTable ; 
PREPARE sqlstm FROM stmt;                             
OPEN CSR;     

getRows:                    
LOOP                        
FETCH CSR INTO ...;   
  IF SQLCODE = 0 THEN    
    ... traitement à faire ...
  ELSE             
    LEAVE getRows;
  END IF;          
END LOOP getRows;      
    
END;
Mercure 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 14h42.


 
 
 
 
Partenaires

Hébergement Web