Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
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 09/05/2007, 15h56   #1
Membre du Club
 
Inscription : mars 2007
Messages : 248
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 248
Points : 46
Points : 46
Par défaut [T-SQL ASE 12.0.3] Parametre pour curseur avec la clause IN

Bonjour
Auriez-vous une idée comment déclarer dans une procédure
un curseur ayant la clause de type:
Code :
1
2
declare cursor C_TEST FOR 
SELECT * FROM <nom_table> t WHERE t.<nom_colonne> IN (@ma_variable)
@ma_variable étant un paramètre de la procédure et contenant une suite de char: "'aaa','bbb','ccc'".
Cela marche , mais pour un seul composant ('aaa').
Si j'initialise ma variable:
Code :
1
2
SELECT @ma_variable = 'aaa' -- c'est OK
SELECT @ma_variable = "'aaa','bbb','ccc'" -- c'est KO
Faut-il utiliser un caractère spécial devant le virgule en initialisant @ma_variable ?

Merci
mso
msomso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 16h13   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
J'évite d'utiliser des curseurs... mais à priori je ne pense pas qu'on puisse paramètrer la déclaration de cette façon.

Ce qui marche:

Code :
1
2
3
 
declare cursor C_TEST FOR 
SELECT * FROM <nom_table> t WHERE t.<nom_colonne> IN (@p1, @p2, @p3)
puisque la variable n'est pas parsée en même temps que la requête elle-même.

Solution de contournement:

Code :
1
2
3
4
5
6
7
8
 
CREATE TABLE #t (p varchar(10))
INSERT #t values(@p1)
INSERT #t values(@p2)
-- etc
declare cursor C_TEST FOR 
SELECT * FROM <nom_table> t WHERE t.<nom_colonne> 
    IN (SELECT p FROM #t)
Il faudra travailler un peu avec les fonctions substring(), patindex(),etc pour extraire les données de la chaine "'aaa', 'bbb', 'ccc'" et les insérer dans la table temporaire.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 14h41   #3
Membre du Club
 
Inscription : mars 2007
Messages : 248
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 248
Points : 46
Points : 46
Merci
msomso 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 03h25.


 
 
 
 
Partenaires

Hébergement Web