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

PL/SQL Oracle Discussion :

Question sur un trigger que je dois realiser


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut Question sur un trigger que je dois realiser
    Salut a tous,

    je dois realiser un trigger pour verifier lors de l'insertion d'un element qu'il n'est pas en rapport avec un autre, je m'explique.
    Voici mes tables

    A(codeA,attributA1,....)
    B(codeB,attributB1,.....)
    C(#codeA,#codeB)

    Donc ma table C fait la liaison entre A et B.
    Moi je dois verifier lors d'une insertion dans C que attributA1 de #codeA n'est pas égal à attributB1 de #codeB.

    Je bloque vraiment au moment de récuperer les attributA1 et attributB1 au moment de les comparer.

    Pouvez-vous m'aider svp, un grand merci d'avance

  2. #2
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    Salut,
    il y a plusieurs méthode possibles, mais voici déjà un point de départ...
    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
    21
    22
    23
    24
    25
    26
    Create or Replace
    Trigger C_CheckABTrg 
    After Insert on C 
    For Each Row
    Declare
    	nAttributA		Number ;
    	nAttributB		Number ;
    Begin
    	Select
    		AttributA1
    	Into 	nAttributA
    	From	A
    	Where	CodeA = :New.CodeA ;
     
    	Select
    		AttributB1
    	Into 	nAttributB
    	From	B
    	Where	CodeB = :New.CodeB ;
     
    	If nAttributA = nAttributB
    	Then
    		-- ton traitement d'erreur
    	End If ;
    End ;
    /

  3. #3
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut
    merci beaucoup pour ta reponse
    Mais je voulais savoir :
    Citation Envoyé par Yorglaa Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Create or Replace
    Trigger C_CheckABTrg 
    After Insert on C 
    For Each Row
    Declare
    	nAttributA		Number ;
    	nAttributB		Number ;
    Begin
    	-- Suite de ton code
    /
    Faut pas mettre plutot que AFTER ?

  4. #4
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    BEFORE est mieux, je pense (en cas de verification est la seule action). Si le traitment est par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    raise_application_error (...)
    le résultat est le même.

    Oracle doc.

    DAB

  5. #5
    Membre confirmé Avatar de L8O8L
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 148
    Par défaut
    Oué daccord et merci a vous deux, je testerai ca.
    Si j'ai des pb je reviendrai ^^

    Mais y'a pas de raisons hein?

  6. #6
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Le code optimalisé:

    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
    CREATE OR REPLACE TRIGGER C_CheckABTrg 
      After INSERT or UPDATE ON C
      FOR Each Row
    Declare
     x Number ;
    Begin
      select 1 into x
        from A, B
        where
          (A.CodeA = :new.CodeA) and
          (B.CodeB = :new.CodeB) and
          (A.AttributA1 = B.AttributB1);
      -- ton traitement d'erreur
    exception
      when no_data_found then
        null;  -- OK
    End ;
    /
    ... lors de l'insertion d'un element ...
    et modification?

    DAB

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur les trigger avec Forms 9i
    Par Arnaud13 dans le forum Forms
    Réponses: 0
    Dernier message: 29/01/2010, 10h44
  2. Question sur les triggers
    Par guidav dans le forum Développement
    Réponses: 3
    Dernier message: 31/08/2009, 18h39
  3. question sur un trigger
    Par contremaitre dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/06/2009, 16h23
  4. Question sur les triggers
    Par Odium dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 08/04/2009, 15h19
  5. 4 questions sur les triggers systeme
    Par ZashOne dans le forum Administration
    Réponses: 2
    Dernier message: 02/11/2007, 14h52

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