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 :

Surement très simple : trigger Oracle


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Points : 71
    Points
    71
    Par défaut Surement très simple : trigger Oracle
    Bonjour, ce code-ci fonctionne parfaitement :

    Je voudrais modifier le trigger pour qu'il n'evoie un mail qu'une fois par jour. J'ai donc crée une table qui contient un compteur (number_of_errors) et un champ date.

    Je voudrais donc faire un if qui si la derniere entrée a comme date la date d'aujourd'hui incrémente le compteur (update) et sinon rajoute une entrée.

    J'ai testé plein de truc mais sans résultats... merci de m'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER mail_alerter
    BEFORE INSERT ON BPM_LOG_DETAIL
    FOR EACH ROW
    WHEN (new.entry between 'F' and 'Fatal error*')
    BEGIN
    sendmail('RLPR','****@****.com',:new.entry);
    END;
    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
    CREATE OR REPLACE PROCEDURE sendmail (sender IN VARCHAR2,
    recipient IN VARCHAR2,
    message IN VARCHAR2)
    IS
    mailhost VARCHAR2(50) := '************';
    mail_conn utl_smtp.connection;
     
    BEGIN
    mail_conn := utl_smtp.open_connection(mailhost, 25);
    utl_smtp.helo(mail_conn, mailhost);
    utl_smtp.mail(mail_conn, sender);
    utl_smtp.rcpt(mail_conn, recipient);
    utl_smtp.open_data(mail_conn);
    utl_smtp.write_data(mail_conn, TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
    utl_smtp.write_data(mail_conn,' : ');
    utl_smtp.write_data(mail_conn, message);
    utl_smtp.close_data(mail_conn);
    utl_smtp.quit(mail_conn);
    END;

  2. #2
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    Yo

    Il y a peut être une piste que tu n'as pas penser à explorer : les jobs oralce !
    http://oracle.developpez.com/guide/d...ages/dbms_job/

    En gros, un job est une tache planifiée dans oracle permettant d'éxecuter à une date et une heure précise, une procédure stockée.
    Tu aura donc à ta disposition une table contenant l'ensemble des taches à réaliser...

    Sur le principe ca serait quelque chose du genre :
    1- Vérifier si j'ai un email de programmé aujourd'hui (à l'aide d'un simple select)
    2- Si c'est la cas, je ne fait rien, mon email partira tout a l'heure
    3- Sinon, je programme un job qui lancera ma procédure "sendMail"

    Ca n'est pas forcément ce qui répond le mieux à tes besoins, mais c'est une piste à explorer

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par Quartus Voir le message
    J'ai testé plein de truc mais sans résultats... merci de m'aider
    Ta logique me semble bonne. Mais si tu ne nous dit pas ce que tu as testé et pourquoi cela n'a pas marché, cela va être dur de t'aider...
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 102
    Points : 71
    Points
    71
    Par défaut
    Merci pour vos réponses, j'ai pas mal galéré pour trouver tout ceci sur le web vu que mes connaissances en oracle sont très moyennes (première utilisation ) -> seulement MySQL, SQL server, DB2

    En tout cas merci pour la piste des jobs, elle ne convient pas pour ce cas-ci, mais au moins, je sais que ca existe !

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    CREATE OR REPLACE TRIGGER mail_alerter
    BEFORE INSERT ON BPM_LOG_DETAIL
    FOR EACH ROW
    WHEN (NEW.entry BETWEEN 'F' AND 'Fatal error*')
    DECLARE
    		olddate rlpr.bpm_error_message_count.datum%TYPE;
    		errors rlpr.bpm_error_message_count.number_of_error%TYPE;
    BEGIN
    	 SELECT datum INTO olddate FROM rlpr.bpm_error_message_count WHERE id = 1;
    	 SELECT number_of_error INTO errors FROM rlpr.bpm_error_message_count WHERE id = 1;
     
    	 /* THE ERROR OCCURS ON THE SAME DAY */
     
    	 IF to_date(olddate, 'DD MON YYYY') = to_date(current_date, 'DD MON YYYY') THEN		
    		UPDATE rlpr.bpm_error_message_count SET number_of_error = number_of_error + 1 WHERE id =1;
     
    		/* MORE THAN 100 ERRORS ON THE SAME DAY */
     
    		IF errors > 100 THEN 
    		   sendmail('RLPR','******@****',:NEW.entry);
    		   UPDATE rlpr.bpm_error_message_count SET number_of_error = 0 WHERE id =1;
    		   END IF;
     
     
     
    	/* THE ERROR OCCURS ON ANOTHER DAY */
     
    	ELSE
    		DELETE FROM rlpr.bpm_error_message_count;
    		INSERT INTO rlpr.bpm_error_message_count VALUES (1, current_date,1);
    		sendmail('RLPR','jean-benoît.kervyn@ucb-group.com',:NEW.entry);
    		END IF;
    END;

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

Discussions similaires

  1. [VBA access 2000]problème surement très bête
    Par herendel dans le forum Access
    Réponses: 5
    Dernier message: 27/04/2006, 14h40
  2. [FLASH 8] Pour un Slide show très simple
    Par obatala dans le forum Flash
    Réponses: 2
    Dernier message: 04/04/2006, 16h34
  3. Application Web Client/Serveur très très simple
    Par n_tony dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 07/03/2006, 14h29
  4. Erreur trigger oracle
    Par djsbens dans le forum Oracle
    Réponses: 7
    Dernier message: 22/02/2006, 13h37
  5. [JDBC]Probleme avec trigger Oracle
    Par aurel89 dans le forum JDBC
    Réponses: 2
    Dernier message: 02/08/2005, 11h53

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