Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2007, 11h14   #1
Membre régulier
 
Avatar de L8O8L
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 79
Points : 79
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
L8O8L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 13h33   #2
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Salut,
il y a plusieurs méthode possibles, mais voici déjà un point de départ...
Code :
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 ;
/
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 13h47   #3
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
Le code optimalisé:

Code :
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 ;
/
Citation:
... lors de l'insertion d'un element ...
et modification?

DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 13h48   #4
Membre régulier
 
Avatar de L8O8L
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 79
Points : 79
merci beaucoup pour ta reponse
Mais je voulais savoir :
Citation:
Envoyé par Yorglaa Voir le message
Code :
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 ?
L8O8L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 14h03   #5
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
BEFORE est mieux, je pense (en cas de verification est la seule action). Si le traitment est par
Code :
raise_application_error (...)
le résultat est le même.

Oracle doc.

DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 14h08   #6
Membre régulier
 
Avatar de L8O8L
 
Inscription : janvier 2007
Messages : 148
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 148
Points : 79
Points : 79
Oué daccord et merci a vous deux, je testerai ca.
Si j'ai des pb je reviendrai ^^

Mais y'a pas de raisons hein?
L8O8L est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h56.


 
 
 
 
Partenaires

Hébergement Web