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 19/10/2011, 09h41   #1
Membre actif
 
Inscription : février 2007
Messages : 139
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : février 2007
Messages : 139
Points : 150
Points : 150
Par défaut DB2 - valeur d'un select dans une variable

Bonjour,

Je cherche à récupérer le résultat d'une requête "select" qui renvoi une seule valeur dans une variable mais je ne trouve pas la syntaxe qui va bien..

Sous d'autres SGBD comme SQLServer par exemple, on peut faire :

Code :
1
2
DECLARE @Compt INT;
SELECT @Compt = MAX(COMPTEUR)  FROM TEMPSCOMPTEUR;
Savez vous la syntaxe équivalente sous DB2 ?

Merci pour votre aide !
lucimed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 09h49   #2
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Code :
SET @Compt = (SELECT MAX(COMPTEUR)  FROM TEMPSCOMPTEUR);
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 10h14   #3
Membre actif
 
Inscription : février 2007
Messages : 139
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : février 2007
Messages : 139
Points : 150
Points : 150
Merci pour votre réponse.
Effectivement la syntaxe que vous m'avez indiqué fonctionne bien dans le cas d'une requête basique comme l'exemple que j'ai donné ..
En fait j'ai donné un mauvais exemple ou plutôt je n'ai pas exposé mon problème complet ...
En réalité, ma requête se compose de select imbriqués et table temporaire :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
DECLARE COMPT INTEGER;
DECLARE ANN INTEGER;
SET ANN = 11;
 
   WITH
   TEMPSCOMPTEUR (ANNEE, COMPTEURMAX) AS
   (
    SELECT T1.ANNEE, MAX(T1.COMPTEUR) AS COMPTEURMAX  
    FROM (
    	SELECT  SUBSTR(CODE,8,2) AS ANNEE, SUBSTR(CODE,11,6) AS COMPTEUR     
		FROM maTable WHERE CODE LIKE 'V%' 
		) T1 GROUP BY T1.ANNEE
    ) 
	SELECT COMPTEURMAX  FROM TEMPSCOMPTEUR WHERE ANNEE = ANN FETCH FIRST 1 ROW ONLY;
Je cherche à récupérer le résultat dans une variable ..
lucimed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 12h23   #4
Membre actif
 
Inscription : février 2007
Messages : 139
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : février 2007
Messages : 139
Points : 150
Points : 150
Bon j'ai réussi à implémenter cette syntaxe en modifiant ma requête pour la rapprocher au maximun d'une requête Select simple :
Code :
1
2
DECLARE Compt INTEGER;
SET Compt = (SELECT MAX(COMPTEUR)  FROM TEMPSCOMPTEUR);
Le problème que j'ai maintenant c'est que le format ne correspond pas :
Citation:
The data types of the operands for the operation "=" are not compatible.. SQLCODE=-401, SQLSTATE=42818
J'ai essayé de modifié le type de Compt en VARCHAR mais sans succès ..

Avez vous des idées ??
lucimed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 14h24   #5
Membre actif
 
Inscription : février 2007
Messages : 139
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : février 2007
Messages : 139
Points : 150
Points : 150
Finalement j'ai passé le type de ma variable en INTEGER et fais un cast dans le select ...
lucimed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 20h42   #6
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Euhhh, derrière ton SET tu peux avoir une CTE (avec un WITH), de mémoire ça ne pose aucun problème. La seule contrainte est le retour d'une seule ligne, sinon il faut déclarer un curseur.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h59.


 
 
 
 
Partenaires

Hébergement Web