Pages: 1
- Sujet prĂ©cĂ©dent - Extraire une requĂȘte SQL inscrite en dur dans une ligne - Sujet suivant
#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: 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
Pages: 1
- Sujet prĂ©cĂ©dent - Extraire une requĂȘte SQL inscrite en dur dans une ligne - Sujet suivant

