#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)
Hors ligne
#2 Thu 09 May 2019 15:19
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
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