Schema
public
Owner
postgres
Descriptions
Cette fonction utilise le contenue de la table contenant les anomalies pour le couple robot/projet passé en paramètre afin de positionner des indicateurs qui permettront de corriger les variables calculées si besoin.
Options
Option | Value |
---|---|
Returns |
boolean |
Language |
plpgsql |
Parameters |
prefix_robot varchar nom_projet varchar |
Definition
CREATE OR REPLACE FUNCTION public.ps_maj_specificite (
prefix_robot varchar,
nom_projet varchar
)
RETURNS boolean AS
$span$
DECLARE
curs_ano refcursor; -- Curseur recevant les informations de la table des spécificités traitée.
rec_ano record; -- Enregistrement contenant la spécificité en cours de traitement
nom_table VARCHAR; -- Nom de la table contenant les spécificités pour le couple Robot /Projet en cours
requete text; -- Variable contenant le texte de requête à exécuter
id_robot INTEGER; -- ID du robot concerné par le traitement
id_projet INTEGER; -- ID du projet concerné par le traitement
horodatage_deb timestamp; -- Horodatage de début de la spécificité.
horodatage_fin timestamp; -- Horodatage de fin de la spécificité.
BEGIN
SELECT rob_id FROM tr_robot_rob WHERE lower(rob_prefix) = lower(prefix_robot) INTO id_robot;
IF NOT found THEN
raise notice 'Erreur - Préfixe robot introuvable : % ', prefix_robot;
return FALSE;
END IF;
nom_table = 't_ano_' || lower(prefix_robot) || '_';
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;
nom_table = nom_table || lower(nom_projet);
requete = 'GRANT SELECT ON ' || nom_table || ' TO robot_lecture;';
EXECUTE requete;
requete = 'GRANT ALL ON ' || nom_table || ' TO robot_ecriture;';
EXECUTE requete;
requete = 'SELECT * FROM ' || nom_table || ';';
OPEN curs_ano FOR -- Récupération des données de la table des spécificités.
EXECUTE requete ;
LOOP
FETCH curs_ano into rec_ano;
IF found THEN
raise notice 'Info : Palette % - % %' , rec_ano.ano_numero_palette , rec_ano.ano_dateout , rec_ano.ano_timeout ;
IF (rec_ano.ano_dateout = rec_ano.ano_datereturn) AND (rec_ano.ano_timeout = rec_ano.ano_timereturn) THEN
-- Met à jour la mesure correspondante
UPDATE t_datarobot_dat SET dat_taadd = rec_ano.ano_arrosage_main, dat_coadd = rec_ano.ano_weight_added WHERE dat_id IN
(SELECT
public.t_datarobot_dat.dat_id
FROM
public.tj_emplacement_plt_rob_emp
INNER JOIN public.t_plant_plt ON (public.tj_emplacement_plt_rob_emp.emp_plt_id = public.t_plant_plt.plt_id)
INNER JOIN public.t_datarobot_dat ON (public.t_plant_plt.plt_id = public.t_datarobot_dat.dat_plt_id)
WHERE
public.t_datarobot_dat.dat_palette = rec_ano.ano_numero_palette AND
public.tj_emplacement_plt_rob_emp.emp_rob_id = id_robot AND
dat_date = rec_ano.ano_dateout AND dat_time = rec_ano.ano_timeout
);
ELSE -- La palette est sortie du robot ; on passe l'indicateur dat_taout à TRUE pour les mesures incluses dans la période de sortie.
horodatage_deb = "timestamp"(date(rec_ano.ano_dateout),"time"(rec_ano.ano_timeout));
horodatage_fin = "timestamp"(date(rec_ano.ano_datereturn),"time"(rec_ano.ano_timereturn));
UPDATE t_datarobot_dat SET dat_taout = TRUE WHERE dat_id IN
(SELECT
public.t_datarobot_dat.dat_id
FROM
public.tj_emplacement_plt_rob_emp
INNER JOIN public.t_plant_plt ON (public.tj_emplacement_plt_rob_emp.emp_plt_id = public.t_plant_plt.plt_id)
INNER JOIN public.t_datarobot_dat ON (public.t_plant_plt.plt_id = public.t_datarobot_dat.dat_plt_id)
WHERE
public.t_datarobot_dat.dat_palette = rec_ano.ano_numero_palette AND
public.tj_emplacement_plt_rob_emp.emp_rob_id = id_robot AND
dat_horodatage BETWEEN horodatage_deb AND horodatage_fin
);
-- Test s'il y a eu ajout d'eau ou de poids durant la période de sortie - dans ce cas on affecte la matière ajoutée au cycle de mesure immédiatement postérieur à l'horodatage de retour de la palette sur le pot.
IF (rec_ano.ano_arrosage_main <> 0) OR (rec_ano.ano_weight_added <> 0) THEN
UPDATE t_datarobot_dat SET dat_taadd = rec_ano.ano_arrosage_main, dat_coadd = rec_ano.ano_weight_added WHERE dat_id IN
(SELECT
public.t_datarobot_dat.dat_id
FROM
public.tj_emplacement_plt_rob_emp
INNER JOIN public.t_plant_plt ON (public.tj_emplacement_plt_rob_emp.emp_plt_id = public.t_plant_plt.plt_id)
INNER JOIN public.t_datarobot_dat ON (public.t_plant_plt.plt_id = public.t_datarobot_dat.dat_plt_id)
WHERE
public.t_datarobot_dat.dat_palette = rec_ano.ano_numero_palette AND
public.tj_emplacement_plt_rob_emp.emp_rob_id = id_robot AND
dat_horodatage > horodatage_fin ORDER BY dat_horodatage LIMIT 1
);
END IF;
END IF;
ELSE
exit;
END IF;
END LOOP;
close curs_ano ;
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_specificite(prefix_robot varchar, nom_projet varchar)
IS 'Cette fonction utilise le contenue de la table contenant les anomalies pour le couple robot/projet passé en paramètre afin de positionner des indicateurs qui permettront de corriger les variables calculées si besoin.';
This file was generated with SQL Manager for PostgreSQL (www.pgsqlmanager.com) at 26/02/2014 11:51 |