Bonjour,

J'ai un package qui me retourne une table d'identifiant.
Je souhaite faire une jointure sur ceux-ci avec l'union de deux tables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
select  * from tmp, (select id from tiers union select id from acteur) acttiers where acttiers.id in
(select * from table(pack_tmp.ACTTIER((select id from tmp tmp2 where tmp2.id=tmp.id)))).
Mon problème dépend des paramètres passés dans mon package

En effet, si je met directement un nombre, la requête est immédiate.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
select  * from tmp, (select id from tiers union select id from acteur) acttiers where acttiers.id in
(select * from table(pack_tmp.ACTTIER((1300))))
Si j'écris la valeur de tmp.id en lui mettant un filtre sur la valeur, c'est hyper long
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
select  * from tmp, (select id from tiers union select id from acteur) acttiers where tmp.id=1300 and acttiers.id in
(select * from table(pack_tmp.ACTTIER((tmp.id))))
Si je passe par un appel à une table intermédiaire, cela reste long
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
select  * from tmp, (select id from tiers union select id from acteur) acttiers where  tmp.id=1300 and acttiers.id in
(select * from table(pack_tmp.ACTTIER((select id from tmp tmp2 where tmp2.id=tmp.id))))

Est-ce que quelqu'un peut m'expliquer ce que je fais mal et comment optimiser pour pouvoir utiliser la 2ème ou 3ème écriture car bien évidemment, je souhaite interroger sur plusieurs enregistrements de tmp.

merci d'avance pour vos éclaircissements.