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 before insert


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2013
    Messages : 71
    Points : 36
    Points
    36
    Par défaut Trigger before insert
    Bonjour , je veux créer un trigger fait le traitement suivant sur la table RECHANGE :

    si lors de l'insertion l'utilisateur laisse le champs Description vide , le trigger se charge de le remplir par quelques valeur,

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create or replace 
    trigger rmp before insert on rechange for each row
    declare
    begin
    if :new.description_rechange IS NULL then
    insert into rechange values (:new.id_rechange,'valeur qui remplace le vide');
    end if;
    end;
    Probleme de c'est que deux ligne sont inséré la premiere est celle du trigger et la deuxieme est celle que j'ai executé mais je veux remplacer l'insertion que je fait avec celle du trigger comment faire?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    il ne faut pas mettre un nouvel insert sur la même table dans le trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    create or replace 
    trigger rmp before insert on rechange for each row
    declare
    begin
    if :new.description_rechange IS NULL then  :new.description_rechange='valeur qui remplace le vide';
    end if;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Pas besoin d'un trigger pour cela, la clause DEFAULT suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE rechange MODIFY description_rechange  DEFAULT 'valeur qui remplace le vide';
    Cela dit ce n'est pas tout à fait le même comportement, il ne faut pas envoyer de valeur dans la colonne.
    Donc peut-être que le trigger est nécessaire si vous ne contrôlez pas tous les ordres d'insertion de données.

    @SergioMaster : On peut écrire encore plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create or replace trigger rmp
    before insert on rechange
    for each row
    declare
    begin
        :new.description_rechange := coalesce(:new.description_rechange, 'valeur qui remplace le vide');
    end;
    /

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

Discussions similaires

  1. [10g] Trigger before insert
    Par Lung dans le forum Oracle
    Réponses: 6
    Dernier message: 21/12/2007, 16h22
  2. Trigger Before Insert et Before Update
    Par NicoNours dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/08/2007, 10h20
  3. Trigger : Before insert
    Par guitou0 dans le forum Développement
    Réponses: 6
    Dernier message: 29/06/2007, 11h39
  4. Trigger Before Insert
    Par Fred_ET dans le forum Administration
    Réponses: 7
    Dernier message: 22/11/2006, 00h29
  5. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12

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