J’ai N serveur avec le même programme : package Flux_trf qui utilise un type d’objet DATA1 créé pour la circonstance.

Sous le user : A1 du serveur A :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
CREATE OR REPLACE TYPE DATA1 AS OBJECT (  d1 varchar2(10), d2 varchar2(20) );
Package Flux_trf
Dont une procedure trf_data(X in varchar2, Y in varchar2, d in out DATA1)
Cette procédure exécute de manière dynamique le transfert de données d’un user X vers un user Y comme cela :
Si même serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
	w_requete := 'BEGIN '|| w_user_dest||'.Flux_trf.CreData(:1 ); END;';
   execute immediate w_requete using IN OUT d;
Si serveur distant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
	w_requete := 'BEGIN '|| w_user_dest||'.Flux_trf.CreData(:1 ); END;';
   execute immediate w_requete using IN OUT d;
Sous le user A2 du même serveur A :
J’ai également le package Flux_trf.
Au départ j’avais créé également le type DATA1 sous le user A2, mais lors de l’exécution de la procédure j’avais le message : PLS-00306: numéro ou types d'arguments erronés

J’ai donc supprimé le type DATA1 du user A2 et créé un synonym public DATA1 pointant sur le type DATA1 du user A1.
Cela a bien fonctionné.

Seulement voilà il peut y avoir des serveurs distants
Donc sous le user B2 du serveur B , je pensais également crée un synonym public distant sur le user A1 avec un databaselink.
Mais lorsque j’accède à ce type de synonym distant DATA1 j’ai le message :
ORA-00902: type de données non valide
Comment puis-je déclarer un type DATA1 unique dans le cas de plusieurs serveurs ou base Oracle différente ?