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

 Oracle Discussion :

Trigger qui annule une requête UPDATE


Sujet :

Oracle

  1. #1
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut Trigger qui annule une requête UPDATE
    Bonjour a tous!

    J'ai une table dans laquelle un champ définis si l'enregistrement est définitif ou pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MATABLE
    -------------
    --[...]une dizaine de champs
    IS_FINAL : NUMBER //vaut 0 ou 1
    Je souhaiterais créer un TRIGGER qui à chaque requête UPDATE ou DELETE va tester la valeur du champs IS_FINAL, et si celui-ci vaut '1' va empêcher la requête de s'exécuter (ou l'annuler).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create or replace TRIGGER TR_CHECK_UPDATE
      BEFORE UPDATE OR DELETE ON MaTABLE
      FOR EACH ROW
      BEGIN
         IF  IS_FINAL = 1 THEN    
             --CANCEL_UPDATE     
         END IF
      END;
    Merci d'avance a ceux qui pourront m'aider!
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  2. #2
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Quel est ton contexte,

    qui peut updater cette colonne , tous les user, un batch ....

    car en fonction , tu pourrais peut etre eviter un trigger ....
    et n'updater que le soir, forcer une valeur default a 0 ....
    ou ne pas autoriser les updates ...

    quel version Oracle tu as ?

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  3. #3
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Alors j'utilise Oracle 9.

    J'ai une interface utilisateur (développée en BCB5) qui permet a des utilisateurs de modifier les valeurs d'une tables (seuls les utilisateurs ayant un rôle prédéfini peuvent modifiée les enregistrement dans cette table).

    A un moment, certains enregistrement doivent être figés (version finale) et ne doivent plus être modfiés. Bien entendu mon interface utilisateur bloque les modifications sur un enregistrement "final".

    Mais je souhaiterais ajouter en sécurité un TRIGGER qui empeche réèllement les UPDATE ou DELETE sur un enregistrement marqué comme final.

    .
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  4. #4
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    un truc de ce genre la

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CREATE OR REPLACE TRIGGER trg_check_update
    BEFORE UPDATE OF IS_FINAL ON MY_TABLE
    FOR EACH ROW 
    DECLARE
       Invalid_number EXCEPTION;
    BEGIN
       IF (:new.is_final =1) THEN
          RAISE Invalid_number;
       END IF;
    EXCEPTION
       WHEN Invalid_number THEN
          Raise_application_error(-20000, 'Invalid Number'
             || ' Number' || TO_CHAR(:new.is_final));
    END;

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/02/2013, 14h47
  2. [MySQL] Message d'erreur sur une requête UPDATE qui fonctionne
    Par Aleadia dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/01/2013, 21h31
  3. [MySQL] Une requête update qui ne renvoie pas d'erreur mais qui n'update pas
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 16/06/2010, 17h59
  4. Annulation d'une requête update
    Par witch dans le forum Développement
    Réponses: 2
    Dernier message: 13/01/2010, 11h35
  5. [MySQL] une requête Update qui ne s'exécute pas
    Par DeveX dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/07/2008, 13h37

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