|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Débutant
Inscription : février 2003 Messages : 54 ![]() |
Bonjour, je débute un peu en PL/SQL, et j'ai une question d'ordre générale sur les triggers (déclencheurs)
J'ai actuellement une base de données (bd1) contenant une table personne1 et j'aimerais faire un déclencheur, qui, a chaque insertion dans cette table, insert une ligne dans une table située dans une autre base de données (bd2). est - il possible de faire un trigger qui lie ainsi deux base de données ? Si oui, pourriez vous me donner un exemple simple d'application ? Merci d'avance |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Je ne pense que c'est possible.
|
|
|
00
|
|
|
#3 | ||
|
Membre actif
![]() Inscription : avril 2006 Messages : 133 ![]() |
En premier lieu, il faut créer un database link entre tes 2 instances ....
Le database link te permet de voir une table T2 sur une instance instance2 depuis l'instance : Instance1 : Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 133 ![]() |
C'est possible, et cela marche ... pas de soucis ..
|
|
|
00
|
|
|
#5 | ||
|
Membre actif
![]() Inscription : avril 2006 Messages : 133 ![]() |
Code :
|
||
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Oui, probablement. Je pensais qu'il s'agissait d'un trigger sur une table de la base distante ...
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 448 ![]() |
Je sais pas ce que ça peut donner sur une grosse appli, mais j'ai vu chez Asktom que les codes des triggers (bien que compilés) étaient reparsés à chaque exécution.
Il est conseillé de créer une procédure et d'appeler cette procédure dans le trigger. Est-ce qu'un parse teste le dblink ? si oui, on peut avoir des perfs réduites. |
|
|
00
|
|
|
#8 |
|
Débutant
Inscription : février 2003 Messages : 54 ![]() |
bon en fait j'aimerais que la cible de ce lien soit une table d'une base de données mySQL. A nouveau, cela est il possible ? Comment faut il configurer le "database link" ?
Merci |
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Au risque de me tromper une seconde fois
|
|
|
00
|
|
|
#10 |
|
Débutant
Inscription : février 2003 Messages : 54 ![]() |
justement c'est ce que je pensais, et j'essaie d'uiliser un driver odbc (MySQL Connector / ODBC 3.51). Je l'ai installer, et le test fait par l'outils d'administration windows me montre qu'il fonction. Mon problème maintenant est que je ne sais pas quoi mettre comme valeur à ce moment de création du datalink :
Connexion au schéma : c'est le nom de ma base mysql ? Mot de passe : le mot de passe de mon user root mysql ? port d'hote distant : 3306 ? SID ou nom de service : alors là j'ai aucune idée ... merci de votre aide |
|
|
00
|
|
|
#11 |
|
Débutant
Inscription : février 2003 Messages : 54 ![]() |
je me répond à moi seul pour faire un peu avancer le débat
Donc j'ai arrêter d'essayer de créer une database link via l'interface graphique d'oracle et me suis plongé dans du bon vieux SQL. Voilà mon script : Je crée d'abord mon datalink en utilisant mon connecteur odbc, et ca fonctionne : create database link myLink connect to "root2" identified by "root" using 'myodbc35'; Le problème est quand je test le link de la manière suivante j'obtiens l'erreur d'oracle écrite ensuite ... select * from ma_table_cible@myLink; ORA-12154: TNS : l'identificateur de connexion indiqué n'a pas pu être résolu Quelqu'un sait il d'où peut venir le problème ? Merci |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
La raison est la suivante:
Citation:
|
|
|
|
00
|
|
|
#13 |
|
Débutant
Inscription : février 2003 Messages : 54 ![]() |
Bonjour, j'ai essayé d'utiliser le principe d'oracle heterogeneous services, mais je n'arrive pas à le faire fonctionner. J'ai utilisé ce "tutorial" http://www.orafusion.com/art_orahs.htm mais je ne l'ai pas réellement compris. J'ai vraiment du mal avec tous les fichiers de configurations ...
Une chose dont je suis peu sûr est la localisation de l'ensemble des fichiers modifiés. Sont -ils tous au niveau C:\oraclexe\app\oracle\product\10.2.0\server\hs\admin ou certains sont au niveau C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN ? Quelle est la différence entre ces deux arborescences ? Sinon, il n'existe pas un utilitaire graphique qui fait "oracle heterogeneous services" facilement ? En vous remerciant d'avance |
|
|
00
|
|
|
#14 | ||||
|
Débutant
Inscription : février 2003 Messages : 54 ![]() |
Bonjour
j'ai enfin réussi à faire communiquer oracle et mysql. Je peux donc à présent faire des requetes "select" à partir d'oracle sur une table de la base mysql. Cependant, je n'arrive pas à faire fonctionner le trigger que jlucch m'a donné précédemment. J'ai essayé de faire un trigger très simple : Code :
Code :
|
||||
|
|
00
|
|
|
#15 |
|
Membre confirmé
![]() |
Est ce qu'une autre solution ne pourrait pas être de créer une procédure stockée JAVA(ou C, C++) qui irait écrire dans la base MySQL, et d'appeler cette procédure stockée dans le trigger?
En tout cas, continue de nous dire ou tu en est clement42 car si tu arrives à trouver une solution qui fonctionne je suis curieux de la connaître. Bon courage.
__________________
Dyvim |
|
|
00
|
|
|
#16 | |
|
Membre confirmé
![]() |
Citation:
Si ton code est bien celui là ... Peut être qu'il faudrait COMMITer ton insert non? ou faire de la transaction autonome? ORA-02047:cannot join the distributed transaction in progressCause:This can happen only when attempting to update an Oracle Version 6 and an Oracle7 database in the same transaction, because either
__________________
Dyvim |
|
|
|
00
|
|
|
#17 | ||
|
Membre actif
![]() Inscription : avril 2006 Messages : 133 ![]() |
tu peux essayer avec cela :
Code :
==> PS : N'oublie pas la gestion d'erreur dans tes triggers ... |
||
|
|
00
|
|
|
#18 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
J'ai quelques doutes sur l'utilisation d'une transaction indépendante dans un trigger: c'est possible mais il faut tenir compte des règles suivantes:
|
|
|
00
|
|
|
#19 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 133 ![]() |
Effectivement, j'ai oublié le commit ..
|
|
|
00
|
|
|
#20 |
|
Membre confirmé
![]() |
Est ce que çà veut dire que çà marche maintenant???
__________________
Dyvim |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com