Schema
public
Owner
postgres
Descriptions
Cette fonction traite les données pour un projet précisé en paramètre.
Elle met à jour les variables corrigées WA_corrige, TA_corrige, TDIFF_corrige et TR_corrige de la table t_datarobot_dat en tenant compte de la présence / absence des plants sur le robot ainsi que des arrosages et apport de poids hors robot.
Options
Option | Value |
---|---|
Returns |
boolean |
Language |
plpgsql |
Parameters |
nom_projet varchar |
Definition
CREATE OR REPLACE FUNCTION public.ps_maj_variables_corrigees (
nom_projet varchar
)
RETURNS boolean AS
$span$
DECLARE
curs_donnee refcursor; -- Curseur recevant les informations de mesure
rec_donnee record; -- Enregistrement contenant la mesure en cours de traitement
plant_en_cours INTEGER; -- Numéro de la palette en cours de traitement
nb_ligne_traite INTEGER; -- Nombre de ligne deja traitee pour la palette en cours
id_ligne_precedente INTEGER; -- Identifiant de la ligne précedemment dans le flux
poids_avant_ligne_precedente INTEGER; -- Poids avant arrosage de la ligne précédente dans le flux
poids_apres_ligne_precedente INTEGER; -- Poids après arrosage de la ligne précédente dans le flux
horodatage_ligne_precedente timestamp; -- Horodatage de la ligne précédente dans le flux
id_projet INTEGER; -- ID du projet concerné par le traitement
eau_hors_robot INTEGER; -- Quantité d'eau ajoutée hors robot
poids_hors_robot INTEGER; -- Poids ajouté hors robot
BEGIN
SELECT pjt_id FROM t_projet_pjt WHERE lower(pjt_nom) = lower(nom_projet) INTO id_projet;
IF NOT found THEN
raise notice 'Erreur - Nom projet introuvable : % ', nom_projet;
return FALSE;
END IF;
-- Réinitialise les variables corrigées pour toutes les données du projet passé en paramètre
UPDATE t_datarobot_dat
SET dat_wa_corrige = NULL,
dat_ta_corrige = NULL,
dat_tdiff_corrige = NULL,
dat_tr_corrige = NULL
WHERE dat_id IN
(SELECT
public.t_datarobot_dat.dat_id
FROM
public.t_fichier_fic
INNER JOIN public.tr_robot_rob ON (public.t_fichier_fic.fic_rob_id = public.tr_robot_rob.rob_id)
INNER JOIN public.tj_affectation_rob_pjt_aff ON (public.tr_robot_rob.rob_id = public.tj_affectation_rob_pjt_aff.aff_rob_id)
INNER JOIN public.t_projet_pjt ON (public.t_projet_pjt.pjt_id = public.tj_affectation_rob_pjt_aff.aff_pjt_id)
INNER JOIN public.t_datarobot_dat ON (public.t_fichier_fic.fic_id = public.t_datarobot_dat.dat_fic_id)
WHERE
(public.t_fichier_fic.fic_date BETWEEN public.tj_affectation_rob_pjt_aff.aff_date_debut AND public.tj_affectation_rob_pjt_aff.aff_date_fin) AND
(lower(public.t_projet_pjt.pjt_nom) = lower(nom_projet))
);
OPEN curs_donnee FOR -- Récupération des données du projet en excluant les lignes pour lesquelles dat_taout = TRUE (palette sortie du robot), celles pour lesquelles le plant est null, le tout trié par plant, date et heure
SELECT * FROM t_datarobot_dat WHERE dat_id IN
(SELECT
public.t_datarobot_dat.dat_id
FROM
public.t_fichier_fic
INNER JOIN public.tr_robot_rob ON (public.t_fichier_fic.fic_rob_id = public.tr_robot_rob.rob_id)
INNER JOIN public.tj_affectation_rob_pjt_aff ON (public.tr_robot_rob.rob_id = public.tj_affectation_rob_pjt_aff.aff_rob_id)
INNER JOIN public.t_projet_pjt ON (public.t_projet_pjt.pjt_id = public.tj_affectation_rob_pjt_aff.aff_pjt_id)
INNER JOIN public.t_datarobot_dat ON (public.t_fichier_fic.fic_id = public.t_datarobot_dat.dat_fic_id)
WHERE
(public.t_fichier_fic.fic_date BETWEEN public.tj_affectation_rob_pjt_aff.aff_date_debut AND public.tj_affectation_rob_pjt_aff.aff_date_fin) AND
(lower(public.t_projet_pjt.pjt_nom) = lower(nom_projet))
)
AND t_datarobot_dat.dat_taout = FALSE
AND NOT (t_datarobot_dat.dat_plt_id isnull)
ORDER BY t_datarobot_dat.dat_plt_id, t_datarobot_dat.dat_date, t_datarobot_dat.dat_time;
plant_en_cours = 0;
nb_ligne_traite = 0;
LOOP
FETCH curs_donnee into rec_donnee;
IF found THEN
raise notice 'Info : % - % ' , rec_donnee.dat_palette , rec_donnee.dat_date ;
IF plant_en_cours <> rec_donnee.dat_plt_id THEN
plant_en_cours = rec_donnee.dat_plt_id;
nb_ligne_traite = 0;
-- Maj des variables non dépendantes du précédent cycle de mesures
-- WA = poids après - poids avant de la ligne en cours
UPDATE t_datarobot_dat SET dat_wa_corrige = rec_donnee.dat_poids_apres - rec_donnee.dat_poids_avant WHERE dat_id = rec_donnee.dat_id;
END IF;
IF nb_ligne_traite > 0 THEN
IF rec_donnee.dat_taadd ISNULL THEN
eau_hors_robot = 0;
ELSE
eau_hors_robot = rec_donnee.dat_taadd;
END IF;
IF rec_donnee.dat_coadd ISNULL THEN
poids_hors_robot = 0;
ELSE
poids_hors_robot = rec_donnee.dat_coadd ;
END IF;
UPDATE t_datarobot_dat
-- WA = poids après - poids avant de la ligne en cours
SET dat_wa_corrige = rec_donnee.dat_poids_apres - rec_donnee.dat_poids_avant,
-- transpiration (TA) = poids avant de la ligne en cours - poids après de la ligne précédente
dat_ta_corrige = poids_apres_ligne_precedente - rec_donnee.dat_poids_avant + eau_hors_robot + poids_hors_robot,
-- Delta t (TDIFF) = Différence entre l'horodatage de la ligne en cours et l'horodatage de la ligne précédente
dat_tdiff_corrige = EXTRACT(EPOCH FROM rec_donnee.dat_horodatage - horodatage_ligne_precedente)/60,
-- taux de transpiration (TR) = TA / TDIFF
dat_tr_corrige = (poids_apres_ligne_precedente - rec_donnee.dat_poids_avant + eau_hors_robot + poids_hors_robot) / (EXTRACT(EPOCH FROM rec_donnee.dat_horodatage - horodatage_ligne_precedente)/60) WHERE dat_id = rec_donnee.dat_id;
END IF;
nb_ligne_traite = nb_ligne_traite + 1;
id_ligne_precedente = rec_donnee.dat_id;
poids_avant_ligne_precedente = rec_donnee.dat_poids_avant;
poids_apres_ligne_precedente = rec_donnee.dat_poids_apres;
horodatage_ligne_precedente = rec_donnee.dat_horodatage;
ELSE
exit;
END IF;
END LOOP;
close curs_donnee ;
return true;
EXCEPTION
WHEN OTHERS THEN
raise notice 'Erreur : % %', sqlstate, sqlerrm;
return false;
END;
$span$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
COMMENT ON FUNCTION public.ps_maj_variables_corrigees(nom_projet varchar)
IS 'Cette fonction traite les données pour un projet précisé en paramètre.
Elle met à jour les variables corrigées WA_corrige, TA_corrige, TDIFF_corrige et TR_corrige de la table t_datarobot_dat en tenant compte de la présence / absence des plants sur le robot ainsi que des arrosages et apport de poids hors robot.';
This file was generated with SQL Manager for PostgreSQL (www.pgsqlmanager.com) at 26/02/2014 11:51 |