pggeodb.nancy.inra.fr/db_robot - db_robot on pggeodb.nancy.inra.fr
Previous topic Chapter index Next topic

Function: ps_maj_variables_corrigees

 

 

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
Previous topic Chapter index Next topic