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 :

[PG/pgsql] Fonction, argument et FROM


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité2
    Invité(e)
    Par défaut [PG/pgsql] Fonction, argument et FROM
    Bonjour,

    Depuis peu j'ai dût m'attaquer aux fonctions, je veux nommer ma table au moment de l'exécution (j'aurais un nombre finit de table), j'ai tenté ça :

    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
    CREATE FUNCTION ri_ajoute_fils(IN nomtable character, IN nom character, IN pk_parent integer) RETURNS void AS
    $$
    DECLARE
    Bornes RECORD;
    BEGIN
    SELECT BordDroite INTO Bornes FROM nomtable WHERE id=pk_parent;
     
    UPDATE nomtable
    SET BordDroit = BordDroit + 2 
    WHERE BordDroit >= Bornes;
     
    UPDATE nomtable
    SET BordGauche = BordGauche + 2 
    WHERE BordGauche >= Bornes;
     
    INSERT INTO nomtable (BordDroit, BordGauche, nom) 
    VALUES (Bornes, Bornes+1, nom);
    END;
    $$LANGUAGE 'plpgsql' VOLATILE;
    Et donc à l'erreur suivante :

    ERREUR: erreur de syntaxe sur ou près de « $1 »
    LIGNE 1 : SELECT BordDroite FROM $1 WHERE id= $2
    ^
    REQUÊTE : SELECT BordDroite FROM $1 WHERE id= $2
    CONTEXTE : SQL statement in PL/PgSQL function "ri_ajoute_fils" near line 4


    ********** Erreur **********

    ERREUR: erreur de syntaxe sur ou près de « $1 »
    État SQL :42601
    Contexte : SQL statement in PL/PgSQL function "ri_ajoute_fils" near line 4
    Il me semblait que Pl/pgsql permettait les variable à la clause FROM, ai-je mal lu ?

    Par avance merci de votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    bonjour,il faut utiliser la commande execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute 'select * from  '|| quote_literal (nom_table)||'...

  3. #3
    jnore
    Invité(e)
    Par défaut
    Attention à mettre des guillemets pour borner les champs qui ont au moins une majuscule !

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    Attention à mettre des guillemets pour borner les champs qui ont au moins une majuscule !
    c'est d'autant plus vrai que je me suis tromper de fonction , il faut utiliiser quote_ident et non quote_literal

  5. #5
    Invité2
    Invité(e)
    Par défaut
    Citation Envoyé par xavier-Pierre Voir le message
    bonjour,il faut utiliser la commande execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute 'select * from  '|| quote_literal (nom_table)||'...
    Euh, j'ai un léger doute, il me semblait que c'était pour les requêtes préparées, non ?
    Je sais que PL/pgsql prépare ces requêtes, mais ça me parrait bizzard

    Citation Envoyé par jnore Voir le message
    Attention à mettre des guillemets pour borner les champs qui ont au moins une majuscule !
    Je ne comprend pas

    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
    CREATE FUNCTION ri_ajoute_fils(IN nom_table character, IN nom character, IN pk_parent integer) RETURNS void AS
    '
    DECLARE
    Bornes RECORD;
    BEGIN
    SELECT BordDroite INTO Bornes FROM ''|| quote_indent (nom_table)||'' WHERE id=pk_parent;
     
    UPDATE ''|| quote_indent (nom_table)||''
    SET BordDroit = BordDroit + 2 
    WHERE BordDroit >= Bornes;
     
    UPDATE ''|| quote_indent (nom_table)||''
    SET BordGauche = BordGauche + 2 
    WHERE BordGauche >= Bornes;
     
    INSERT INTO ''|| quote_indent (nom_table)||'' (BordDroit, BordGauche, nom) 
    VALUES (Bornes, Bornes+1, nom);
    END;
    'LANGUAGE plpgsql VOLATILE;
    J'ai tout essayé, avec $$ à la place des ', avec des ' à la place de '', j'ai relu la partie sur les '', je vois pas, quelqu'un pourrait m'envoyer le lien vers la partie qui traite de ça, ou, pourrait m'expliquer, par avance merci de votre aide

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    Euh, j'ai un léger doute, il me semblait que c'était pour les requêtes préparées, non ?
    Je sais que PL/pgsql prépare ces requêtes, mais ça me parrait bizzard
    en tout cas ça marche
    la fonction est quote_ident et non quote_indent
    essaie cette fonction toute simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE FUNCTION xf_select(ma_table text)
      RETURNS void AS
    $BODY$begin 
    drop view if exists essai_select;
     execute 'create view  essai_select as select * from '|| quote_ident(ma_table);
    return;
    end;$BODY$
      LANGUAGE 'plpgsql'

Discussions similaires

  1. Fonction argument d'une autre Fonction
    Par didyeah dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2007, 15h10
  2. Appel de fonctions/arguments
    Par GO dans le forum C++
    Réponses: 14
    Dernier message: 25/09/2006, 22h46
  3. [Débutant]Fonction à arguments variables
    Par Jahjouh dans le forum C++
    Réponses: 5
    Dernier message: 14/09/2006, 23h21
  4. Fonction à argument(s) optionnel(s)
    Par JUJU and CO dans le forum C
    Réponses: 3
    Dernier message: 27/01/2006, 11h51
  5. fonction , arguments
    Par molesqualeux dans le forum C
    Réponses: 6
    Dernier message: 31/10/2005, 17h45

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