Ancestrologie - Développement > Développement
Corrections et améliorations des procedures stockées
Gvx:
Bonsoir,
J'ouvre ce fil, afin de pouvoir regrouper les diffrentes propositions d'améliorations consernant les procedures stockées dans la base.
Ceci devrait facilité le travail de PCM lors d'une prochaine mise a jour.
Car actuellement on trouve des propositions dans divers fils
Gvx:
Voici ma premiere proposition d'amélioration
Procedure: PROC_ORPHELINS
Correction: Dans la version actuelle les individus uniquements associés a des evenements (n'étant ni dans l'ascendance, ni dans la descendance) sont reconnus comme orphelin. Ceci risque d'amener a supprimer l'individu par erreur. Je propose donc de corriger cette anomalie
Il faut modifier la clause Where de la façon suivante: (ajout de la dernière ligne)
--- Code: --- WHERE KLE_DOSSIER = :IDOSSIER and
CLE_PERE IS NULL and
CLE_MERE IS NULL And
CLE_FICHE not in (select cle_pere from individu) and
CLE_FICHE not in (select cle_mere from individu) and
CLE_FICHE not in (select union_mari from T_UNION) and
CLE_FICHE not in (select union_femme from T_UNION) and
CLE_FICHE not in (select assoc_kle_associe from t_associations)
--- Fin du code ---
DDdeBerdeux:
Bonne idée.
Message modifié, voir le 17/9
DDdeBerdeux:
Dans http://www.ancestrologie.org/forum/index.php?topic=4630.0 une proposition pour supprimer l'erreur "multiple rows in singleton select" lors de l'exportation de toutes les images.
A+
André
DDdeBerdeux:
Dans http://www.ybruant.magic.fr/phpBB2a/viewtopic.php?p=30983#30983 je signale que le double affichage des unions dans la fiche individus doit être dû à la procédure PROC_TROUVE_UNION, qui renvoie un enregistrement par evènement "MARR" de l'union. Dans cette utilisation, l'année du mariage n'est utile que pour ordonner les conjoints dans un ordre chronologique. Je propose que l'ordre ne soit pas défini par l'année du mariage, mais par la date du premier évènement familial, ce qui assure un seul enregistrement retourné par union. Si cette procédure n'est pas utilisée ailleurs où les modifications pourraient gêner (mes essais n'ont pas révélés de problèmes), la nouvelle version pourrait être:
--- Code: ---
DECLARE VARIABLE DATE_UNION DATE;
BEGIN
FOR
SELECT i.CLE_FICHE,
i.NOM,
i.PRENOM,
i.DATE_NAISSANCE,
i.ANNEE_NAISSANCE,
i.DATE_DECES,
i.ANNEE_DECES,
i.SEXE,
i.CLE_PERE,
i.CLE_MERE,
i.NUM_SOSA ,
u.union_type,
u.union_clef ,
MIN(ef.EV_FAM_DATE_YEAR),
MIN(ef.EV_FAM_DATE)
FROM t_union u
INNER JOIN individu i
ON (u.union_mari = :I_CLEF and i.cle_fiche = u.union_femme) OR
(u.union_femme = :I_CLEF and i.cle_fiche = u.union_mari)
LEFT join evenements_fam ef
on (ef.ev_fam_kle_famille = u.union_clef)
GROUP BY i.CLE_FICHE,
i.NOM,
i.PRENOM,
i.DATE_NAISSANCE,
i.ANNEE_NAISSANCE,
i.DATE_DECES,
i.ANNEE_DECES,
i.SEXE,
i.CLE_PERE,
i.CLE_MERE,
i.NUM_SOSA ,
u.union_type,
u.union_clef
ORDER BY MIN(ef.EV_FAM_DATE_YEAR),MIN(ef.EV_FAM_DATE)
INTO :CLE_FICHE,
:NOM,
:PRENOM,
:DATE_NAISSANCE,
:ANNEE_NAISSANCE,
:DATE_DECES,
:ANNEE_DECES,
:SEXE,
:CLE_PERE,
:CLE_MERE,
:NUM_SOSA,
:TYPE_UNION,
:UNION_CLEF,
:ANNEE_MARIAGE,
:DATE_UNION
DO
SUSPEND;
END
--- Fin du code ---
en attendant de trouver mieux (ordre chronologique défini par le premier évènement familial ou la première naissance d'un enfant du couple).
Les conjoints apparaissent dans l'ordre chronologique, le premier en tête. S'il n'y a pas d'évènement familial enregistré, le conjoint apparaît en dernier.
André
PS: réédition le 23/09/2005 pour prendre en compte la date exacte si elle existe au lieu de l'année seule, dans la définition de l'ordre chronologique.
Navigation
[#] Page suivante
Utiliser la version classique