Exécution d’une procédure distante avec type DATA1 en paramètre
	
	
		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:
	
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:
	
| 12
 
 | 	w_requete := 'BEGIN '|| w_user_dest||'.Flux_trf.CreData(:1 ); END;';
   execute immediate w_requete using IN OUT d; | 
           Si serveur distant
	Code:
	
| 12
 
 | 	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 :
	Citation:
	
		
		
			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 ?
	 
	
	
	
		Tests basiques : même erreur
	
	
		Meilleurs vœux à tous pour nouvelle année
Pour répondre à tes questions :
Les droits d’exécution sur le package sont corrects, mais c’est la variable de type DATA1 qui pose problème. 
Le user B1 se connecte au serveur A via un Dblink et la connexion depuis le serveur B vers le serveur A via A1 fonctionne.
Ci-dessous les tests basiques que j’ai fait :
Sous user A1 serveur A j’exécute  :
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 
 | CREATE OR REPLACE TYPE DATA1 AS OBJECT (  d1 varchar2(10), d2 varchar2(20) )
/
GRANT ALL ON DATA1 TO PUBLIC
/
CREATE table TOTO ( d1 varchar2(10), d2 varchar2(20) )
/
GRANT ALL ON TOTO TO PUBLIC
/ | 
 Sous user A2 serveur A l’exécution suivante est correcte :
	Code:
	
| 12
 
 | desc A1.DATA1
desc A1.TOTO | 
 
Sous user B1 serveur B  :
	Code:
	
desc A1.TOTO@BDL_B_VERS_A
  est correcte
Mais 
	Code:
	
desc A1.DATA1@BDL_B_VERS_A
  me renvoie le message d’erreur :
	Code:
	
ORA-00902: type de données non valide
 Aurais-je oublié quelque chose ?