banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oubliĂ© ?

#1 Thu 09 May 2019 14:12

bruhnild
Participant actif
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 130

Extraire une requĂȘte SQL inscrite en dur dans une ligne

Bonjour,

J'ai une requete SQL Ă©crite en dur (query dans la capture) dans une ligne de ma table A. Cette requĂȘte est un SELECT qui appelle des champs d'une table B. J'aimerais pouvoir exĂ©cuter cette requĂȘte et utiliser les valeurs renvoyĂ©es dans ma table A pour y faire un calcul Ă  partir de la requĂȘte inscrite dans la colonne select_data.
Je n'arrive pas Ă  comprendre comment extraire les informations de ma ligne sous ofrme de requete SQL.
J'espÚre avoir été assez claire dans mon explication.

Merci d'avance pour votre aide!

Dernière modification par bruhnild (Thu 09 May 2019 14:13)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Thu 09 May 2019 15:19

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1566

Re: Extraire une requĂȘte SQL inscrite en dur dans une ligne

Bonjour,

Vous pouvez passer par du code pour faire ca, en fabriquant la requete SQL a partir des valeurs des tables (si je comprends bien).
Exemple fait avec un block anonyme. Si vous devez retourner des valeurs, il faut le faire avec une fonction:

Code:

do language plpgsql $$
    DECLARE
        v_query       text;
        v_select_data text;
        v_newquery    text;
    BEGIN
        select query, select_data from tablea into v_query, v_select_data;
        v_newquery = format('create table res as with tmp as (%s) select %s as val from tmp', v_query, v_select_data);

        execute v_newquery;
    end;
    $$;

Vous pouvez aussi le faire sous forme de requete SQL et executer le rĂ©sultat de cette requĂȘte avec psql (\gexec pour exĂ©cuter le dernier rĂ©sultat de psql en tant que nouvelle requete SQL):

Code:

[local]:5532 nicolas@nicolas=# with tmp as (
    select id, query, select_data
    from tablea
) select format('with tmp as (%s) select %s as val from tmp;', query, select_data)
from tmp;
                                                              format                                                              
----------------------------------------------------------------------------------------------------------------------------------
 with tmp as (select codgeo as codgeo, p15_rp as log, p15_log as parc from tableb) select sum(log)*100/sum(parc) as val from tmp;
(1 row)

[local]:5532 nicolas@nicolas=# \gexec 
       val        
------------------
 83.3333333333333
(1 row)

Nicolas

Hors ligne

 

#3 Fri 10 May 2019 09:22

bruhnild
Participant actif
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 130

Re: Extraire une requĂȘte SQL inscrite en dur dans une ligne

Bonjour,
Merci pour votre réponse. J'ai eu des difficultés à utiliser la fonction \gexec psql mais la solution avec DO fonctionne impeccablement.
Voici sa derniĂšre version:

Code:

DO LANGUAGE plpgsql $$
    DECLARE
        v_query text;
        v_select_data text;
        v_id_geo text;
        v_newquery text;
    BEGIN

        SELECT query, select_data, id_geo FROM indicateur into v_query, v_select_data, v_id_geo ;
        v_newquery = (
 WITH tmp AS
    (SELECT id_geo,
            query,
            select_data
     FROM indicateur)
SELECT format('DROP TABLE IF EXISTS query; CREATE TABLE query AS WITH tmp as (%s) SELECT %s as data, codgeo as id_geo FROM tmp GROUP BY codgeo ;', query, select_data, id_geo) FROM tmp
LIMIT 1) ;


        execute v_newquery;

    END;
    $$;

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo