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

SQL Oracle Discussion :

Trigger : mettre une valeur à 0 dans une colonne si un autre est passée à 1


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Trigger : mettre une valeur à 0 dans une colonne si un autre est passée à 1
    Bonjour,

    Je ne jamais écrit de Trigger et je souhaite simplement mettre une valeur à "0" dans toutes les lignes d'une colonne si une autre colonne dans la même table passe à la valeur 1 sur une des lignes. Je suis sous Oracle 10g.

    Merci.

  2. #2
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Tu as lu la doc ?
    http://download.oracle.com/docs/cd/B...htm#sthref7885

    Before insert ? Before update ?
    Il s'agit juste d'une syntaxe, et d'un test.

    Nicolas.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par NGasparotto Voir le message
    Tu as lu la doc ?
    http://download.oracle.com/docs/cd/B...htm#sthref7885

    Before insert ? Before update ?
    Il s'agit juste d'une syntaxe, et d'un test.

    Nicolas.
    Before update.

    Je regarde la doc mais je suis un peu noyé.
    merci.

  4. #4
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace trigger my_trigger 
    before update on my_table
    for each row
    begin
    if :new.col1=1 then 
    :new.col2:=0;
    end if;
    end;
    /
    Nicolas.

  5. #5
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par kyake Voir le message
    ...mettre une valeur à "0" dans toutes les lignes d'une colonne si une autre colonne dans la même table passe à la valeur 1 sur une des lignes...
    Hmmm, en fait, je n'ai peut-etre pas tout compris. Peux-tu donner plus de details sur ce point ?

    Nicolas.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par NGasparotto Voir le message
    Hmmm, en fait, je n'ai peut-etre pas tout compris. Peux-tu donner plus de details sur ce point ?

    Nicolas.
    Bonjour,

    Voici un exemple :

    ID COL1 COL2
    -- ----- -----
    1 1 1
    2 0 1
    3 0 1
    4 0 1
    5 0 1

    update table set COL1='0' where id='1'

    ID COL1 COL2
    -- ----- -----
    1 0 0
    2 0 0
    3 0 0
    4 0 0
    5 0 0

    Donc si on passe un des champs à 0 sur COL1 je souhaiterais que tous les champs dans COL2 passent à 0.

    Merci NGasparotto, je vais tester mais je ne sais pas si toutes les colonnes seront mises à jour ???

  7. #7
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Bon, basiquement les triggers ne permettent pas de faire ce que tu veux, parce qu'il s'agit d'un update d'une table que tu es en train d'updater (error mutating trigger).
    Il y aurait bien des possiblites, avec autonomous trigger (voir ici), mais crois moi, les triggers ne sont pas prevus initialement pour cela, puis c'est rendre le code assez complique (notemment maintenance), donc il est vraiment mieux d'integrer ce genre de chose au niveau du code applicatif plutot qu'au niveau de trigger base.

    Nicolas.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par NGasparotto Voir le message
    Bon, basiquement les triggers ne permettent pas de faire ce que tu veux, parce qu'il s'agit d'un update d'une table que tu es en train d'updater (error mutating trigger).
    Il y aurait bien des possiblites, avec autonomous trigger (voir ici), mais crois moi, les triggers ne sont pas prevus initialement pour cela, puis c'est rendre le code assez complique (notemment maintenance), donc il est vraiment mieux d'integrer ce genre de chose au niveau du code applicatif plutot qu'au niveau de trigger base.

    Nicolas.
    Tu as raison, je pousse pour que cela soit fait au niveau de code applicatif.

    Mais finalement mettre à jour une colonne à la fois pourrait finalement convenir, merci beaucoup pour ton aide. Je testerai cette semaine.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2012, 17h23
  2. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  3. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  4. Réponses: 1
    Dernier message: 11/06/2008, 13h33
  5. Mettre une valeur infini dans une matrice
    Par malikakika dans le forum C++Builder
    Réponses: 1
    Dernier message: 24/09/2007, 14h48

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