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 26/08/2008, 16h40   #1
Invité de passage
 
Inscription : janvier 2005
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 8
Points : 0
Points : 0
Par défaut Trigger (PLSQL) 10g express

Bonjour,
j'utilise oracle 10g express, j'ai une table T1 dont je veux appliquer un trigger qui interdit l'insertion pour eviter un doublon dans un chanp C1, au moment d'insérer s'il existe la même donnée dans le champ je veux que mon trigger refuse cette insertion en fait je connait pas les trigger mais d'après mes recherches sur google j'ai réussie à créer un trigger qui n'a pas d'erreur dans le code mais malheureusement qui fonctionne pas car malgré le trigger j'arrive à inserer des doublons voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE TRIGGER  "Trigger_sans_erreur_compile" 
AFTER  INSERT ON TABLE1
FOR each row
DECLARE CHAMP1 NUMBER(4);
begin
IF :new.CHAMP1=:old.CHAMP1 
THEN
raise_application_error(-20040,'insertion impossible');
END IF;
end;
je sais vraiment pas pourquoi j'arrive toujours à insérer des doublons.
Merci pour votre aide
oupeh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 16h55   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Il ne suffit pas de rechercher sur google. Il faut lire aussi la documentation, ça aide beaucoup.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 16h56   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Une bonne méthode pour gérer simplement est de créer un index unique sur la valeur.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2008, 17h07   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par SheikYerbouti Voir le message
Une bonne méthode pour gérer simplement est de créer un index unique sur la valeur.
Disons plutôt une contrainte de type UNIQUE.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 17h01   #5
Invité de passage
 
Inscription : janvier 2005
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 8
Points : 0
Points : 0
Oui j'ai penser à la contrainte mais j'aimerais quand meme savoir comment on peut le faire avec un trigger.
oupeh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 17h10   #6
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
C'est très compliqué avec un trigger car cela sous-entend un balayage des lignes existantes, qui n'est pas faisable sur la table supportant le trigger, sous peine de provoquer l'erreur : Mutating Table.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2008, 12h03   #7
Invité de passage
 
Inscription : janvier 2005
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 8
Points : 0
Points : 0
Citation:
C'est très compliqué avec un trigger car cela sous-entend un balayage des lignes existantes, qui n'est pas faisable sur la table supportant le trigger, sous peine de provoquer l'erreur : Mutating Table.
Oui certainement on doit faire un balayage, mais si on faisait un balayage avec une requête select, j'ai l'idée mais j'ai du mal à le mettre en place du moins si possible; on déclare une variable on fait un select pour récupérer la valeur insérée et la mettre dans cette variable ensuite on pause nos conditions si cette valeur existe deja dans le champ on met un raise_application_error si la valeur n'existe pas on insère la valeur.
Bien dit je pense mais comment faire ?
oupeh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2008, 12h08   #8
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Vous êtes fantastique ! on vous répète que l'ajout d'une contrainte est une solution simple et facile et que le trigger n'est pas la bonne solution, mais vous persistez à vouloir l'utiliser
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h02.


 
 
 
 
Partenaires

Hébergement Web