Bonjour,
Il fallait bien une nuit pour laisser se reposer les "petites cellules grises" avant de tenter l'expérience
A voir votre code (MP_IDENTITE=1) vous avez décidé d'attribuer la même photo d'identité à tous vos sosas.
Pour commencer il faut que vous fassiez une renumérotation sosa et que vous attribuyez au decujus (sosa n°1) la photo d'identité que vous voulez affecter à tous les autres sosas.
Ensuite il faut attribuer à ces autres sosas, cette photo comme identité, à condition que cette même photo ne leur soit pas déjà attribuée (sans celà, ils auraient 2 fois la même photo).
Celà peut se faire par la requête suivante:
insert into media_pointeurs
(mp_clef
,mp_media
,mp_cle_individu
,mp_pointe_sur
,mp_table
,mp_identite
,mp_kle_dossier
,mp_type_image)
select
(select cle_unique from proc_get_clef_unique('MEDIA_POINTEURS'))
,dp.mp_media --la photo d'identité du decujus
,i.cle_fiche
,i.cle_fiche
,'I'
,1 --identifiant le média comme "identité"
,d.kle_dossier
,'I'
from individu d --le decujus
inner join media_pointeurs dp on dp.mp_identite=1
and dp.mp_cle_individu=d.cle_fiche --sa photo d'identité
inner join individu i on i.num_sosa>1
and i.kle_dossier=d.kle_dossier
where d.num_sosa=1
and --pour ne pas attribuer 2 fois la même photo à un individu
not exists (select * from media_pointeurs
where mp_cle_individu=i.cle_fiche
and mp_media=dp.mp_media)
and d.kle_dossier=:dossier --":dossier" le n° de votre dossier
en remplaçant :dossier (symbole ":" compris) par votre n° de dossier. Si vous exécutez la requête dans le BOA, cliquez sur "Exécuter procédure" car cette requête ne retourne pas de résultats, et n'oubliez pas de valider les modifications avant de quitter.
Ensuite, à moins que vous soyez sûre que cette photo n'ait jamais été attribuée auparavant, il faut la déclarer comme identité pour les individus sosas aux quels elle était déjà attribuée par la requête suivante:
update media_pointeurs p
set p.mp_identite=1
where p.mp_identite=0 --si la photo était déjà attribuée
and exists (select *
from individu d
inner join media_pointeurs dp on dp.mp_identite=1
and dp.mp_cle_individu=d.cle_fiche
and dp.mp_media=p.mp_media
inner join individu i on i.num_sosa>1
and i.kle_dossier=d.kle_dossier
and i.cle_fiche=p.mp_cle_individu
where d.num_sosa=1
and d.kle_dossier=:dossier)
en remplaçant également :dossier par le n° de votre dossier.
Bonne chance.
André
PS: dans les requêtes ci-dessus, le texte précédé sur la même ligne par le symbole "--" est un commentaire. Il n'est pas nécessaire de le supprimer pour exécuter la requête.
Si les variables telles que :dossier sont précédées du symbole ":", c'est parce que celà permet à certains requêteurs comme IBExpert de les reconnaître et de les présenter dans un tableau à remplir lors de l'exécution.