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 :

NOM DE COLONNE PARAMETré


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut NOM DE COLONNE PARAMETré
    Bonjour tout le monde,

    je voudrais paramétrer le nom de mes colonnes.voilà comment ma table se présente:

    Facture01;Facture02;Facture03;Facture04;...;Facture12
    les chiffres correspondants aux différents mois de l'année.

    voici un bout de code de ma procédure stockée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    IF 
        SUBSTR(xINVOICE_NO,5,2)=04 
    THEN UPDATE BAL_AGEE SET   FACTURE04=xFACTURE 
        WHERE CONTRACT_NO=xCONTRACT;
    END IF;
     
    IF 
        SUBSTR(xINVOICE_NO,5,2)=05
     THEN UPDATE BAL_AGEE SET   FACTURE05=xFACTURE 
      WHERE CONTRACT_NO=xCONTRACT;
    END IF;
    .....
     
    IF 
        SUBSTR(xINVOICE_NO,5,2)=12
     THEN UPDATE BAL_AGEE SET   FACTURE12=xFACTURE 
      WHERE CONTRACT_NO=xCONTRACT;
    END IF;
    je voudrais pouvoir utiliser une variable dans une boucle de sorte à pouvoir modifier dynamiquement le nom de mes colonnes FACTUREX(X allant de 1 à 12).

    Esperant avoir bien posé mon souci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    C'est possible mais concaténant une chaîne de caractères puis en effectuant un execute immediate.

    Voir l'entrée de Sheikyerbouti à ce sujet :
    http://sheikyerbouti.developpez.com/execute_immediate/

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut
    merci Waldar de t'être penché sur ma préoccupation.J'avais dejà lu cette doc de SheikYerbouti que je salue au passage.

    je me demande si le script ci-dessous pourrait être une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE
       X  integer
    BEGIN
    X:=1
    Loop
      LC$Requete := ‘Update BAL_AGEE set 'FACTURE'||X where FACTURE=Xfacture’;
      EXECUTE IMMEDIATE LC$Requete;
      X:=X+1;
      exit when X=12
    END loop;
    end
    merci d'éclairer ma lanterne

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il y a plus rapide pour écrire la boucle, et il faut penser à bien transformer le nombre en chaîne.

    Ça donnerait quelque chose de ce goût-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    declare
      LC$Requete varchar2(250);
    begin
      for x in 1..12
      loop
        LC$Requete := 'Update BAL_AGEE set facture' || to_char(x, 'FM00') || 
                      ' = :1 where contract_no = :2';
        execute immediate LC$Requete using xFACTURE, xCONTRACT;
      end loop;
    end;
    /
    N'oubliez pas de contrôler le code généré à l'aide de dbms_output.

Discussions similaires

  1. [JTable] les noms des colonnes de s'affichent pas
    Par macben dans le forum Composants
    Réponses: 6
    Dernier message: 25/04/2008, 11h03
  2. Nom de colonne en parametre dans procedure stockee
    Par davidou2001 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/06/2007, 17h26
  3. [SWING][JTable]Cacher noms des colonnes
    Par Antunes dans le forum Composants
    Réponses: 2
    Dernier message: 28/06/2004, 11h48
  4. Noms de colonne dans une colonne
    Par Digirom dans le forum Langage SQL
    Réponses: 14
    Dernier message: 23/04/2004, 11h51
  5. Mauvais noms de colonnes lors d'une requête
    Par nmathon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/04/2004, 07h27

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