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

Sybase Discussion :

[T-SQL ASE 12.0.3] Parametre pour curseur avec la clause IN


Sujet :

Sybase

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de parametres pour les requêtes SQL
    Par Med86 dans le forum Windows Forms
    Réponses: 21
    Dernier message: 28/11/2008, 12h14
  2. xsl:for-each avec un parametre pour select
    Par arnog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/08/2008, 13h09
  3. Paramètre pour spécifier répertoire décompression avec tar
    Par snoop dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 05/06/2006, 11h00
  4. Réponses: 2
    Dernier message: 14/03/2005, 19h55
  5. [novice]parametre pour dll
    Par tixu dans le forum C++
    Réponses: 4
    Dernier message: 12/11/2004, 14h32

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