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

Requêtes PostgreSQL Discussion :

fonction et creation de table/index


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut fonction et creation de table/index
    Bonjour,

    J'essaye de créer une fonction qui me servirait à créer une table qui aurait un nom dynamique passé en paramètre (ou un index).
    Cela ne fonctionne pas du tout, auriez vous une idée ? (exemple ci dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE FUNCTION create_ouv_dts(indexname text)
      RETURNS integer AS
    $BODY$CREATE TABLE create_tempo
    (
      date timestamp without time zone,
      appli character varying(249)
    ); 
    CREATE INDEX $1
      ON create_tempo
      USING btree
      (date, appli);
     
    select 0 from moisdernier;$BODY$
      LANGUAGE 'sql' VOLATILE

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Vouloir créer des tables dynamiquement revient à modifier la structure d'une base de données, ce qui est pour le moins inhabituel comme pratique !

    Normalement, on modélise la BDD et on n'y touche plus, sauf en cas de modifications majeures de besoins.

    On peut savoir pourquoi vous voulez faire ça ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    J'ai une table contenant des noms de clients. Chaque client possède X tables (du genre nomduclient_table1, nomduclient_table2 ...).
    Le nom de ces tables est donc dynamique, ainsi que les noms d'index.
    Je m'en suis sorti avec le nom des tables en créant une table temporaire et en changeant son nom ensuite (j'utilise un ETL pour toutes ces tâches).
    Je voulais éviter de faire un script sql en plus par index, d'où l'idée de pouvoir créer un index avec un nom dynamique.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et pourquoi faire une table par client ?
    Elles contiennent quoi ces tables ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Dans la grammaire du SQL, il faut distinguer les litéraux des identifiants. Les litéraux désignent des valeurs alors que les identifiants désignent tout le reste.
    Or $1,$2 etc.. ne peuvent remplacer que des litéraux et pas des identifiants.

    C'est pourquoi le code suivant est valide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tbl(col1) VALUES($1)
    alors que le code suivant ne l'est pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO $1(col1) VALUES(1234)
    Lorsqu'on veut quand même utiliser des identifiants passés en paramètre dans des variables, il faut faire ce qu'on appelle du SQL dynamique, c.a.d construire une chaîne de caractères contenant l'intégralité de la requête, et passer cette chaîne en paramètre à l'instruction EXECUTE.

Discussions similaires

  1. Creation d'une table indexée sur un TINYTEXT
    Par EvilAngel dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/08/2006, 19h03
  2. vider table + index primaire
    Par jihed dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/07/2004, 16h43
  3. Table + Index Partionnées
    Par superfly dans le forum Import/Export
    Réponses: 7
    Dernier message: 18/03/2004, 09h52
  4. Creation de table multi base
    Par baboune dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/02/2004, 09h23
  5. Creation de table, caractère non reconnu
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/02/2004, 13h28

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