IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

utiliser un trigger sous sql server pour inserer des donnees dans Oracle


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Par défaut utiliser un trigger sous sql server pour inserer des donnees dans Oracle
    Bonjour tous le monde,
    j'ai des problemes avec l'utilisation d'un trigger sous sql server:
    le premier c'est que je connais pas la syntaxe d'un trigger sous sql server.
    deuxieme c'est que je utilise un serveur lié dont le nom est TIGER qui marche trés bien avec les simple utilisation.

    maintenant je veux utiliser un trigger qui fait une insertion dans une table sous sql server et on meme temps il execute un procedure sous oracle.

    et merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    je connais pas la syntaxe d'un trigger sous sql server.
    Vous pouvez consulter en ligne ou télécharger la documentation de SQL Server à partir des liens dans ma signature, en recherchant CREATE TRIGGER

    je veux utiliser un trigger qui fait une insertion dans une table sous sql server et on meme temps il execute un procedure sous oracle.
    Votre trigger ressemblera donc à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE TRIGGER TR_AI_maTableSource
    	ON dbo.maTableSource
    AFTER INSERT
    AS
    BEGIN
    	INSERT INTO dbo.maTableCible
    	(
    		mesColonnes
    	)
    	SELECT desColonnes
    	FROM INSERTED
    	JOIN desTables ON INSERTED.uneCle = uneTable.uneCle
     
    	EXEC TIGER.maBD.monSchema.maProcedureStockee
    		@parametres
    END
    Dans un trigger SQL Server, vous avez accès aux tables virtuelles INSERTED et DELETED. Ces deux tables ont strictement la même structure que la table sur laquelle l'instruction de modification a été effectuée.
    Comme vous pouvez vous en douter, la table INSERTED reflète les nouvelles valeurs appliquées à la table, tandis que la table DELETED contient les anciennes valeurs contenues dans la table.

    Au niveau des différences d'implémentation des triggers entre Oracle et SQL Server, sachez que les triggers sous SQL Server sont purement ensemblistes, à la différence d'Oracle, pour lequel vous êtes obligé de spécifier FOR EACH ROW, c'est à dire que les lignes sont traitées une par une.
    Enfin, les triggers BEFORE n'existent pas sous SQL Server : vous pouvez seulement spécifier des trigger AFTER/FOR et INSTEAD OF.

    @++

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Par défaut
    Je vous remercie infiniment pour votre reponse bien claire.
    je vais tester cela et vous repondre s'il y a un probleme.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Par défaut
    Merci bien pour votre reponse mais malheureusement j'ai pas compris cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT desColonnes
    	FROM INSERTED
    	JOIN desTables ON INSERTED.uneCle = uneTable.uneCle
    Merci pour donner des explications à 'desColonnes', 'desTables','uneTable.uneclé'

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Par défaut
    Bonjour ,
    j'ai utilisé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    CREATE TRIGGER TRo_maTableSource
    	ON dbo.personne
    AFTER INSERT
    AS
    BEGIN
     
    	INSERT INTO dbo.personne
    	(
    		first_name
    	)
     
     
    exec ('BEGIN
     custebs_create_employee(''xxxx'');
    END;
    ') at TIGER;
     
     
    END

    je sais pas si ma syntaxe est corrcte mais quand je la execute ça march bien.
    Mais lorsk j'essai de faire un insert into le message suivant apparait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    OLE DB provider "OraOLEDB.Oracle" for linked server "TIGER" returned message "La nouvelle transaction ne peut pas s'inscrire dans le coordinateur de transactions spécifié. ".
    Msg*7391, Niveau*16, État*2, Procédure*TRo_maTableSource, Ligne*10
    The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" for linked server "TIGER" was unable to begin a distributed transaction.
    merci de me repondre

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    En fait vous auriez du écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TRIGGER TRo_maTableSource
    	ON dbo.personne
    AFTER INSERT
    AS
    BEGIN
    	INSERT INTO dbo.personne
    	(
    		first_name
    	) 
    	EXEC TIGER.maBaseDeDonnees.monSchema.custebs_create_employee(''xxxx'');
    END
    Merci pour donner des explications à 'desColonnes', 'desTables','uneTable.uneclé'
    - 'desColonnes' : il s'agit des colonnes provenant de tables que vous référencez dans la clause FROM / JOIN de votre requête

    - 'desTables' : dans la clause FROM / JOIN, vous pouvez spécifier plusieurs tables, qui sont la reliées deux à deux par des contraintes d'intégrité sur les colonnes de ces tables, que l'on appelle clés (clé primaire et clé étrangèe )

    - uneTable.uneclé : exemple FACTURE.IDFacture ou encore LIGNE_FACTURE.IDFacture

    Pour bien comprendre les jointures, regardez cet article de SQLPro, et ici pour les contraintes

    @++

Discussions similaires

  1. Création de trigger sous SQL Server 2008
    Par lessoy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/04/2013, 12h49
  2. Trigger sous SQL-Server
    Par momedalhouma dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/02/2012, 16h46
  3. Tester la performance d'un trigger sous SQL Server 2008
    Par lerieure dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/02/2011, 18h04
  4. [SQL-Server] Développer sous SQL Server pour la 1re fois
    Par Ayor81 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/09/2008, 13h26
  5. Réponses: 2
    Dernier message: 17/10/2006, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo