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 :

Trigger (PLSQL) 10g express


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    Il ne suffit pas de rechercher sur google. Il faut lire aussi la documentation, ça aide beaucoup.

  3. #3
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Une bonne méthode pour gérer simplement est de créer un index unique sur la valeur.

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    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.

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Par défaut
    Oui j'ai penser à la contrainte mais j'aimerais quand meme savoir comment on peut le faire avec un trigger.

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    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.

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Par défaut
    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 ?

  8. #8
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    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

Discussions similaires

  1. Triggers Oracle 10g Express Edition
    Par Pikatch dans le forum SQL
    Réponses: 3
    Dernier message: 24/05/2008, 04h27
  2. 10g Express Edition Production
    Par SheikYerbouti dans le forum Oracle
    Réponses: 22
    Dernier message: 22/01/2008, 10h22
  3. Oracle 10g (Express Edition) ...
    Par avaacn dans le forum Oracle
    Réponses: 9
    Dernier message: 04/04/2006, 17h09
  4. Réponses: 1
    Dernier message: 22/03/2006, 08h24
  5. [Instal] 10g express edition
    Par h.sofia dans le forum Oracle
    Réponses: 23
    Dernier message: 02/03/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