Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 17/11/2011, 14h35   #1
Invité régulier
 
Inscription : juin 2006
Messages : 42
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 42
Points : 9
Points : 9
Par défaut Concaténer une variable et un nom de colonne

Bonjour,

Je suis entrain de faire un script SQL et j'aimerais concater un paramètre et le nom d'une colonne.

exemple :

l'utilisateur rentre la valeur 10, j'aimerais que dans ma requête j'ai la colonne myCol10 qui soit ramené. Si l'utilisateur entre 2 on me retourne le contenu de myCol2...

Vulgairement j'aimerais savoir si qqch existe et qui fasse ça :

Code :
1
2
DEFINE mois = &m
SELECT myCol+'&mois.'+_VALUE
Merci par avance,
Jérémy
jeremy276 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h39   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 547
Points : 7 547
Il faut utiliser du SQL dynamique, avec la commande EXECUTE IMMEDIATE.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h52   #3
Invité régulier
 
Inscription : juin 2006
Messages : 42
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 42
Points : 9
Points : 9
Merci pour ta réponse rapide.

Mais pourrais tu me donner un exemple ? Car j'ai regardé sur internet mais je vois pas trop comment l'utiliser

Merci par avance,
jeremy276 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h52   #4
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut,

Si tu n'en as que 12, tu peux faire avec CASE :
Code :
1
2
3
4
5
6
 
SELECT CASE '&mois.' WHEN 1 THEN myCol1_VALUE
                     WHEN 2 THEN myCol2_VALUE
                     ...  
                     WHEN 12 THEN myCol12_VALUE END
FROM TaTable
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h54   #5
Invité régulier
 
Inscription : juin 2006
Messages : 42
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 42
Points : 9
Points : 9
Salut,

J'ai fait en utilisant le CASE, mais il me retourne rien :$
Il me met pas d'erreur mais me retourne le juste libellé de la colonne, mais avec aucun contenu...

Une idée?
jeremy276 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 16h45   #6
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Je suppose que le CASE n'arrive pas à matcher...

Tu peux essayer de rajouter un to_number ?
(Genre : CASE to_number('&mois.') WHEN 1 THEN...)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2011, 17h10   #7
Invité régulier
 
Inscription : juin 2006
Messages : 42
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 42
Points : 9
Points : 9
Même avec le to_number il affiche rien.

Par contre qd je change un condition après une des then ben il me sort une erreur .

Code :
1
2
3
4
5
6
7
8
9
CASE to_number('&mois.') WHEN 1 then SS.CAPACITESOUSCRITE1_VALUE 
                          WHEN 2 then SS.CAPACITESOUSCRITE2_VALUE 
                          WHEN 3 then SS.CAPACITESOUSCRITE3_VALUE
                          ...
                          WHEN 9 then SS.CAPACITESOUSCRITE9_VALUE 
                          WHEN 10 then SS.DATEFIN
                          WHEN 11 then SS.CAPACITESOUSCRITE11_VALUE 
                          WHEN 12 then SS.CAPACITESOUSCRITE12_VALUE 
                          END AS CAJ
Lorsque j'exécute ca j'ai l'erreur suivante :

Citation:
Erreur à la ligne de commande : 15, colonne : 39
Rapport d'erreur :
Erreur SQL : ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : DATE
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
La ligne 15 est la ligne When 9 ....
jeremy276 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 17h16   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 313
Points : 5 819
Points : 5 819
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> CREATE TABLE t_num (t1 int, t2 int, t22 int);
 
TABLE created
 
SQL> define numcol='1'
SQL> SELECT t&numcol
  2  FROM t_num;
 
                                     T1
---------------------------------------
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2011, 17h23   #9
Invité régulier
 
Inscription : juin 2006
Messages : 42
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 42
Points : 9
Points : 9
Enfait je dois reformer cette colonne :

Code :
SS.CAPACITESOUSCRITE9_VALUE
Ce que j'aimerais faire c'est un SS.CAPACITESOUSCRITE + &maVar + _VALUE

Je viens de tester ca :

Code :
1
2
3
DEFINE mois = &mois
DEFINE endWord = '_VALUE'
SELECT  SS.CAPACITESOUSCRITE&mois&endWord
Ca a l'air de marcher, mais il y aurait pas plus joli et moins barbare? ^^
jeremy276 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 13h42.


 
 
 
 
Partenaires

Hébergement Web