URL: https://linuxfr.org/forums/programmation-sql/posts/rendre-une-requ%C3%AAte-param%C3%A9trable-persistante Title: Rendre une requête paramétrable persistante. Authors: Gyro Gearllose Date: 2007年06月05日T13:51:29+02:00 Tags: Score: 0 Hello ! Afin de me gagner du temps, j'aimerai intégrer à une base de données postgres un genre de requête préparée qui répondrait à cette requête :
select prv_agt.num_agt, dat_deb, max(dat_ptj) as fin, temps(sum(temps(temps))::int4) as fait, temps((tps_est/(ndj_trv/2.)*(max(dat_ptj)-dat_deb+1))::int4) as prevu, temps(sum(temps(temps))::int4 - (tps_est/(ndj_trv/2.)*(max(dat_ptj)-dat_deb+1))::int4) as diff from totaljournee, prv_agt where totaljournee.num_agt = 1ドル and totaljournee.num_agt = prv_agt.num_agt and (dat_ptj between dat_deb and dat_fin and getFinPeriode(dat_ptj) - 1 = dat_fin) and dat_ptj <= 2ドル group by prv_agt.num_agt, dat_deb, tps_est, ndj_trv order by 1;
Notez les 1ドル et 2ドル placés dans la clause where. Évidement, je pourrais faire un prepare statement, mais le soucis de cette manipulation, c'est que son existence est limitée à la durée de vie de la connexion à la base. De plus, ce n'est pas partageable d'un utilisateur à un autre, etc. J'ai bien essayé de faire une fonction, en précédant le code ci-dessus de
create type infos_prev as (num_agt int4, dat_deb date, dat_fin date, fait text, prevu text, diff text); create or replace function rea_prev(integer, date) returns setof infos_prev as $$
et le faire suivre d'un $$ language SQL; ça fonctionne, mais au lieu de me retourner des lignes du genre :
num_agt | dat_deb | fin | fait | prevu | diff ---------+------------+------------+-------+-------+-------- 3 | 01-09-2006 | 01-09-2006 | 00:00 | 00:00 | 00:00 3 | 04-09-2006 | 08-09-2006 | 22:58 | 24:00 | -01:02
ça me retourne :
rea_prev ---------------------------------------------- (3,01-09-2006,01-09-2006,00:00,00:00,00:00) (3,04-09-2006,08-09-2006,22:58,24:00,-01:02)
qui n'est pas exploitable en l'état.... Je m'en retourne vers vous donc, car là, je ne sais vraiment pas comment procéder pour arriver à mes fins. Merci d'avance pour toute aide.

AltStyle によって変換されたページ (->オリジナル) /