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 25/10/2011, 15h55   #1
Invité de passage
 
Homme Sébastien Mahieu
Administrateur Système et Base de données
Inscription : janvier 2008
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Mahieu
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 : 12
Points : 0
Points : 0
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.
mahieus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 16h15   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 16h19   #3
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Citation:
et dans le forum, mais je n'ai rien trouvé de concret.


http://sheikyerbouti.developpez.com/...age=Chap6#L6.1
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 16h37   #4
Invité de passage
 
Homme Sébastien Mahieu
Administrateur Système et Base de données
Inscription : janvier 2008
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Mahieu
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 : 12
Points : 0
Points : 0
J'ai fait ce code :

Code :
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.
mahieus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 18h04   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Compare chaque ligne du code de sheik et du tien.. tu vas voir une différence rapidement sur un mot clé absent
Code :
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 20h56   #6
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
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
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 11h11   #7
Invité de passage
 
Homme Sébastien Mahieu
Administrateur Système et Base de données
Inscription : janvier 2008
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Mahieu
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 : 12
Points : 0
Points : 0
Problème résolu. Voici mon code PL/SQL :

Code :
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.
mahieus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 11h39   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Tu n'es pas obligé d'avoir une variable ticket
Code :
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 :
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 11h41   #9
Invité de passage
 
Homme Sébastien Mahieu
Administrateur Système et Base de données
Inscription : janvier 2008
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Mahieu
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 : 12
Points : 0
Points : 0
Très bien, merci.
mahieus 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 12h24.


 
 
 
 
Partenaires

Hébergement Web