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 :

Instruction EXECUTE avec paramètres


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Par défaut Instruction EXECUTE avec paramètres
    Quelqu'un peut-il m'expliquer où se situe mon erreur:

    Ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT INTO member_info * FROM t_tmp_member;
    RETURN member_info;
    Cela ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sql_select:='SELECT INTO ' || member_info || ' * FROM t_tmp_member;';
    EXECUTE sql_select;
    RETURN member_info;
    et génère ce type d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR:  could not find array type for data type typ_member_alldetails
    Un petit tour sur le Net ne m'a pas vraiment aidé

    Une idée?

    Merci d'avance!

  2. #2
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut
    je crois avoir vu dans la doc postgresql il n'y a pas longtemps que le SELECT INTO n'est pas supporté par la commande EXECUTE.
    ce qui explique peut-être ton problème.
    bonne journée

  3. #3
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut
    précision :
    ta commande SELECT INTO ne te renverra que le dernier enregistrement récupéré par ta requête. Si tu veux tous les enregistrements retournés par ta requete, il faut boucler.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Par défaut
    je crois avoir vu dans la doc postgresql il n'y a pas longtemps que le SELECT INTO n'est pas supporté par la commande EXECUTE
    Merci pour ta réponse Gerald, je n'avais pas vu ça dans la doc, ça serait bien en effet la cause de mon problème.

    ta commande SELECT INTO ne te renverra que le dernier enregistrement récupéré par ta requête
    Aucun niveau à ce problème, elle ne doit retourner qu'un record

    Je m'enfonce dans une impasse... En fait, pour "contourner" le problème rencontré et expliqué dans ce forum (sujet : Fonction: Retour d'un SET dynamique), j'ai trouvé une solution passant par une table temporaire et la déclaration d'un type. Cette solution fonctionne à merveille ... mais 1 seule fois car vu que je travaille avec un CREATE TEMP TABLE, je tombe dans le side effect de pl/pgsql qui me donne une erreur "relation with OID ###### does not exist" et pour laquelle on me recommande d'utiliser EXECUTE pour les accès à la table... si mon SELECT INTO ne peut figurer dans mon EXECUTE, je tourne en rond...

    Je vais essayé de trouvé une solution pour contourner les problèmes rencontrés avec ma solution de contour

    Outils puissant mais avec quelques limites déplaisantes

  5. #5
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Hello,

    pourquoi un EXECUTE?
    un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE
        member_info RECORD;
    BEGIN
        SELECT INTO member_info * FROM t_tmp_member;
    ....
    END;
    ca marche pas?

  6. #6
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Par défaut
    Si Spoutnik, cela fonctionne, mais comme je l'ai indiqué juste ici plus haut, cela ne fonctionne qu'une seule fois. Une fois la fonction exécutée, je dois la supprimer (drop) et la recréer pour que cela fonctionne à nouveau.

    Voici ce que j'ai trouvé dans les FAQ sur postgresql.org:
    PL/PgSQL caches function scripts, and an unfortunate side effect is that if a PL/PgSQL function accesses a temporary table, and that table is later dropped and recreated, and the function called again, the function will fail because the cached function contents still point to the old temporary table. The solution is to use EXECUTE for temporary table access in PL/PgSQL. This will cause the query to be reparsed every time.
    J'ai 5 instructions dans ma fonction: create temp table, insert, update, select into et le drop de ma table. Pour suivre les conseils de la FAQ, j'ai donc fais des EXECUTE mais seul le "select into" pose problème.

  7. #7
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut
    et es-tu obligé de travailler sur une table temporaire?

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/05/2013, 14h29
  2. [A-03] Executer une requete avec paramètres
    Par mattvin dans le forum IHM
    Réponses: 2
    Dernier message: 09/02/2009, 11h44
  3. Executer une application avec paramètres
    Par GUNNM45 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/09/2008, 09h54
  4. Réponses: 8
    Dernier message: 19/12/2006, 23h55
  5. Réponses: 1
    Dernier message: 03/12/2006, 16h13

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