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

PostgreSQL Discussion :

Colonne avec un nom contenant ":"


Sujet :

PostgreSQL

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Colonne avec un nom contenant ":"
    Bonjour à tous,

    J'ai une table qui contient des colonnes "name:es", "name:fr", "name:it" etc. que j'aimerais renommer en "es", "fr", "it".

    Pour éviter de faire un script que 10.000 lignes (car j'ai plusieurs tables avec ces colonnes), j'ai recensé les codes iso dans une table à par, nommée iso_codes.

    Mais j'ai un problème pour faire une fonction qui va boucler sur la table iso_codes afin de lancer les renommages de champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE FUNCTION fct_rename_columns() RETURNS VOID AS '
    	DECLARE
    		r iso_codes%rowtype;
    	BEGIN
    		FOR r IN SELECT * FROM iso_codes LIMIT 1 LOOP
    			ALTER TABLE ma_table RENAME COLUMN name:''||r.iso||'';
    		END LOOP;
    	END;
    'language 'plpgsql';
    Mais ça ne fonctionne pas, j'ai l'impression qu'il n'y a que les tables que l'on peut référencer par une chaîne de caractère, pas les colonnes.

    Comment je peux faire ?

    Merci à vous,

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Regarde du côté du SQL dynamique...
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Oui c'est ce que j'ai fait, et je ne suis tombé que sur des exemples du genre on prépare une requête avec des paramètres "WHERE voiture.price < ? AND voiture.perf > ? FROM voiture", qu'on remplaçait pas des $1 et autres $2.

    En revanche en ce qui concerne ces diableries de ":" dans les noms de colonnes, je n'ai pas bien trouvé d'exemple..

    Si quelqu'un pouvait m'aiguiller sur ce que je dois chercher, ça serait bien sympa

    Merci à vous !
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    1. Il faut utiliser la commande EXECUTE IMMEDIATE pour exécuter une commande créée "à la volée".
    2. Ton nom de colonne a-normal doit être encadré de guillemets doubles.
    3. Il manque la fin de ta commande qui attend le nouveau nom de la colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE 'ALTER TABLE ma_table RENAME COLUMN "name:' || r.iso || '" TO ' || nouveau_nom;
    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
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/12/2009, 19h59
  2. Workflow : Colonne avec le nom du workflow
    Par lesanglier dans le forum SharePoint
    Réponses: 3
    Dernier message: 20/11/2009, 14h31
  3. [MySQL] Récupérer le nom d'une colonne avec le nom de la table
    Par hacksi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/06/2008, 11h15
  4. Réponses: 8
    Dernier message: 29/05/2008, 13h26
  5. Nombre de colonnes avec le nom de la table
    Par benji41 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/07/2005, 20h17

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