|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Invité de passage
![]() ti whenInscription : octobre 2010 Messages : 7 ![]() |
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) ); 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 :
Code :
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:
|
|||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Pour moi lorsque tu te connectes via le serveur B au serveur A tu le fais via un user A3 créé sur le seveur A.
Donc si le user A3 est correctement configuré (cf a les droits d'exécution sur le package et sur le type DATA1) ça devrait être bon... mais je ne suis pas trop sûr et évidemment je n'ai pas fait de test, les prolématiques via DBlink obligeant à créer une autre base... Peux tu nous préciser comment le user B1 se connecte STP ? Pour faire basique as tu testé une connexion depuis le serveur B vers le serveur A via le user A1, juste pour s'assurer en dev de la faisabilité ? |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() ti whenInscription : octobre 2010 Messages : 7 ![]() |
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 sql :
Sous user B1 serveur B : est correcte Mais me renvoie le message d’erreur : Aurais-je oublié quelque chose ? |
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Apparemment il faut assigner un OID, mais je n'ai jamais testé, j'éspère que j'ai bien compris.
Sinon pour le desc il y a effectivement des limitations via DBlink. |
|
|
00
|
|
|
#5 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Restriction on Using User-Defined Types with a Remote Database
Citation:
|
|
|
|
00
|
|
|
#6 | ||
|
Membre expérimenté
![]() ![]() Inscription : décembre 2005 Messages : 541 ![]() |
Il faut associer un objet identifier au type
http://download.oracle.com/docs/cd/B.../obj_types.htm Code :
|
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() ti whenInscription : octobre 2010 Messages : 7 ![]() |
J’ai fait quelques tests effectivement l’utilisation des types utilisateurs ( ici DATA1 ) n’est pas utilisable comme paramètres de procédure dans le cas d’utilisation de DBLink. Même en utilisant l’option OID.
Apparemment cette option ne servirait que dans le cadre des import/export et de query distribué !! ![]() Dans mon cas j’ai fait un exemple avec DATA1 qui est une structure simple, mais en réalité le type est beaucoup plus complexe ( 30 champs en entête et un tableau avec une structure également de 40 champs Nous sommes à l’ère de la programmation Objet il me semble. Oracle no 1 mondial en parle aussi… Alors quelque aurait-il une idée pour passer des paramètres complexes, similaires aux types utilisateurs, dans le cas d’une architecture avec plusieurs bases de données ? |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Ca devrait aller en utilisant un package pour définir le type complexe. Bref, ce n’est pas tout à fait la même chose que l’utilisation des types utilisateur mais, parfois ça peut suffire.
|
|
|
00
|
|
|
#10 | |
|
Invité de passage
![]() ti whenInscription : octobre 2010 Messages : 7 ![]() |
Citation:
Le problème c'est que je veux executer ses procédure de manières dynamiques puisque je peux avoir N serveurs. La seule solution que je voie c'est de passer par des tables temporaires ayant la même structure que les types. De faire des INSERT de manières dynamiques mais en détaillant chaque champs ( puisqu'on ne peut pas non plus utiliser de 'type utilisateur' lors des opérations INSERT en multi-bases ). Puis d'exécuter une procédure qui lit la table temporaire. En attendant qu'ORACLE développe cette fonctionnalité... peut-être qu'elle existe déjà en version 11G ? |
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Oui en gros c’est ça.
Pourriez-toi mettre un petit exemple complet de ce que t’essaie d’accomplir (deux bases, création des users, création du database link, tables, package, données, résultat attendu, etc.) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com