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

PL/SQL Oracle Discussion :

Requête avec nom de colonne intégrant une variable


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Requête avec nom de colonne intégrant une variable
    Bonjour, je souhaiterais effectuer une requête sur une table MA_TABLE qui dispose de plusieurs colonnes commençant par le même nom : COLONNE_1, COLONNE_2, COLONNE_3, etc... jusqu'à COLONNE_20.

    L'objectif de la requête est d'obtenir uniquement les colonnes qui n'ont aucune valeur de saisie dans les enregistrements.

    Cette requête intégrerait donc une exception de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM MA_TABLE 
    WHERE  COLONNE_1 IS NULL 
    OR COLONNE_2 IS NUL 
    OR COLONNE_3 IS NULL 
    OR COLONNE_4 IS NULL
     etc..
    Comment pourrais-je faire une boucle sur le nom d'une colonne afin d'éviter de taper COLONNE_n IS NULL plusieurs fois.

    J'ai essayé la chose suivante mais cela ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    declare @i int
    declare @cmd varchar(100)
    SELECT @i = 1
    while @i < 21
    begin
        SELECT @cmd = SELECT * FROM MA_TABLE WHERE COLONNE_@i IS NULL
        exec (@cmd)
        SELECT @i = @i + 1
    end
    Merci par avance de votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Ce que vous faites n'est pas du SQL.
    Précisez le langage que vous utilisez, ou mieux, postez dans le bon forum directement.

  3. #3
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 812
    Points : 34 084
    Points
    34 084
    Billets dans le blog
    14
    Par défaut
    20 colonnes qui portent quasiment le même nom ?
    Y aurait pas comme un défaut de conception par hasard ?

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Je suppose que ta syntaxe ne doit pas être tout à fait juste.
    Par exemple, il faut certainement délimiter ta requête avec des quotes.

    En suite, d'un point de vue logique, il faut mettre ton exec à l'extérieur de la boucle.
    Cette boucle construit la chaîne entière avec tous les OR.

    1. Tu initialises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @cmd = "SELECT * FROM TaTable WHERE COLONNE_1 IS NULL "
    2. Tu boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while ...
    @cmd = @cmd || " OR COLONNE_" || @i;
    end
    3. Tu executes

    La syntaxe du langage procédural dépend sûrement pas mal du SGBD, donc essaie de te trouver des exemples pour bien réussir, et lis bien les messages d'erreur de syntaxe. (la concaténation, l'exécution, les casts, ...)

    Bon courage

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok c'était une base de départ pour indiquer une boucle car je ne sais pas comment faire sous SQL. Par ailleurs, dans ce cas là comment je peux définir un caractère inconnu dans le nom d'une colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM MA_TABLE WHERE COLONNE_i IS NULL

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    On ne fait pas de boucle en SQL, et on ne déclare pas de variable non plus.
    La plupart des SGBD ont un langage procédural associé, comme Transact-SQL pour SQL Server ou PL SQL pour Oracle, qui permettent entre autre de faire ce genre de chose. Sinon de nombreux langages de programmation font aussi très bien l'affaire.
    Donc encore une fois, précisez votre SGBD, et éventuellement postez votre demande dans le forum dédié.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok pour l'info, le langage procédural est le PL/SQL sur base Oracle.

Discussions similaires

  1. Nom de colonne dans une @variable
    Par Devilstuff dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/09/2012, 09h46
  2. Requête SQL dynamique avec nom de table dans une variable
    Par jonjack dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 15/09/2011, 15h37
  3. Réponses: 5
    Dernier message: 10/02/2010, 15h11
  4. nom de colonne dans une variable
    Par cyclone_yas dans le forum SQL
    Réponses: 12
    Dernier message: 27/12/2006, 11h41
  5. Pb Update dans une PS avec nom de colonne comme paramètre
    Par blowlagoon dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/06/2006, 11h20

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