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 avec valeur de champ


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur Système et Base de données
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur Système et Base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 31
    Points
    31
    Par défaut Trigger avec valeur de champ
    Bonjour,

    Je souhaite créé un trigger qui s'exécute en fonction de la valeur d'un champ. J'ai cherché sur le net et dans le forum, mais je n'ai rien trouvé de concret.

    Quelqu'un aurait-il un petit bout de code ou un lien qui puisse m'aider s'il vous plait ?

    Merci d'avance.

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    trigger for each row avec clause when

    et une recherche sur "oracle trigger clause when"
    http://download.oracle.com/docs/cd/B...s_triggers.htm
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    et dans le forum, mais je n'ai rien trouvé de concret.


    http://sheikyerbouti.developpez.com/...age=Chap6#L6.1
    Cordialement.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur Système et Base de données
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur Système et Base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 31
    Points
    31
    Par défaut
    J'ai fait ce code :

    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
     
    CREATE OR REPLACE TRIGGER "ISILOG"."Z_MAIL_TICKET"
         AFTER INSERT
         ON ISILOG.APPEL
         FOR EACH ROW
    begin
      if :NEW.C_SOCIETE = 'INFOSYS' then
          execute immediate 'alter session set smtp_out_server = ''127.0.0.1''';
          utl_mail.send(sender => 'alerte@site.local',
          recipients => 'alerte@site.local',
          subject => 'alerte Oracle trigger',
          message => 'nouvel enregistrement',
          mime_type => 'text; charset=us-ascii');
      end if;
     end;
    /
    Il m'affiche cette erreur :
    Avertissement : Déclencheur créé avec erreurs de compilation.
    Il m'indique l'erreur PLS-00048 : variable attachée (bind variable) erronée 'NEW.C_SOCIETE';

    C_SOCIETE est un champ de la table APPEL du schéma ISILOG.

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Compare chaque ligne du code de sheik et du tien.. tu vas voir une différence rapidement sur un mot clé absent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> CREATE OR REPLACE TRIGGER TRG_BDR_EMP
      2     BEFORE DELETE -- avant supression
      3     ON EMP        -- sur la table EMP
      4     FOR EACH ROW  -- pour chaque ligne
      5  Declare
      6    LC$Chaine VARCHAR2(100);
      7  Begin  
      8    dbms_output.put_line( 'Suppression de l''employé n° ' || To_char( :OLD.empno )
      9       || ' -> ' || :OLD.ename ) ;
     10  End ;
     11  /
     
    Déclencheur créé.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Par contre il est préférable de ne pas envoyer le mail depuis le trigger mais via un job cf email in PL/SQL

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur Système et Base de données
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur Système et Base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 31
    Points
    31
    Par défaut
    Problème résolu. Voici mon code PL/SQL :

    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
     
    CREATE OR REPLACE TRIGGER "ISILOG"."Z_MAIL_TICKET"
         AFTER INSERT ON ISILOG.APPEL
         FOR EACH ROW
     
    declare
         ticket varchar2(100);
     
    begin
        ticket := :new.IDT_APPEL;
        if :new.C_EQUIPE = 'INFOSYS' then
          execute immediate 'alter session set smtp_out_server = ''127.0.0.1''';
          utl_mail.send(sender => 'alerte@site.local',
          recipients => 'alerte@site.local',
          subject => 'alerte Oracle trigger',
          message => 'nouvel enregistrement - no ' || to_char(ticket),
          mime_type => 'text; charset=us-ascii');
       end if;
     end;
    /
    Merci à tous pour votre aide.

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tu n'es pas obligé d'avoir une variable ticket
    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
    CREATE OR REPLACE TRIGGER "ISILOG"."Z_MAIL_TICKET"
         AFTER INSERT ON ISILOG.APPEL
         FOR EACH ROW
     
    declare
    begin
        IF :new.C_EQUIPE = 'INFOSYS' 
       then
          execute immediate 'alter session set smtp_out_server = ''127.0.0.1''';
          utl_mail.send(sender => 'alerte@site.local',
          recipients => 'alerte@site.local',
          subject => 'alerte Oracle trigger',
          message => 'nouvel enregistrement - no ' || to_char(:new.IDT_APPEL),
          mime_type => 'text; charset=us-ascii');
       end IF;
     end;
    Sinon avec clause WHEN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE TRIGGER "ISILOG"."Z_MAIL_TICKET"
         AFTER INSERT ON ISILOG.APPEL
         FOR EACH ROW
     WHEN (new.C_EQUIPE = 'INFOSYS')
    declare
    begin
           execute immediate 'alter session set smtp_out_server = ''127.0.0.1''';
          utl_mail.send(sender => 'alerte@site.local',
          recipients => 'alerte@site.local',
          subject => 'alerte Oracle trigger',
          message => 'nouvel enregistrement - no ' || to_char(:new.IDT_APPEL),
          mime_type => 'text; charset=us-ascii');
     end;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur Système et Base de données
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur Système et Base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 31
    Points
    31
    Par défaut
    Très bien, merci.

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

Discussions similaires

  1. [MySQL] Rechercher avec valeur de champ texte
    Par xymagic dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/11/2011, 18h40
  2. Menu contextuel avec récupération de la valeur du champ cliqué
    Par lodan dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/05/2007, 17h28
  3. Réponses: 3
    Dernier message: 20/09/2006, 16h07
  4. Update d'un champs avec valeur d'une autre table.
    Par dbuweb dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/06/2006, 11h36
  5. creer champ avec valeur constante dans resultat de requete
    Par freejeje dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/05/2005, 10h52

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