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 :

Raison de l'impossibilité de faire un SELECT dans un trigger BEFORE DELETE ? [12c]


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de goute
    Homme Profil pro
    Développeur éclectique
    Inscrit en
    Novembre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur éclectique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 224
    Par défaut Raison de l'impossibilité de faire un SELECT dans un trigger BEFORE DELETE ?
    Bonjour,

    Je crois que tout est dans le titre, petit rappel

    Raison de l'impossibilité de faire un SELECT dans un trigger BEFORE DELETE ?

    Merci d'avance Tchô !

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Non ça n'est pas du tout explicite, postez un exemple de votre problème

  3. #3
    Membre très actif Avatar de goute
    Homme Profil pro
    Développeur éclectique
    Inscrit en
    Novembre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur éclectique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 224
    Par défaut
    Désolé, je voulais dire pourquoi il est impossible de faire un SELECT sur la table que l'on va modifier dans un trigger BEFORE DELETE.

    La doc dit que c'est parce que la table est en cours de mutation mais je ne vois pas le problème...

    Si ce n'est toujours pas clair je mettrai un exemple

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Pourtant cela fonctionne, donc poste un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select version from v$instance;
     
    VERSION
    -----------------
    12.2.0.1.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL>  CREATE TABLE wmc (a number);
     
    Table created.
     
    SQL> CREATE OR REPLACE TRIGGER wmc_bd BEFORE DELETE ON wmc 
      2   DECLARE
      3    v number;
      4   BEGIN
      5    SELECT COUNT(*) INTO v FROM wmc;
      6    DBMS_OUTPUT.put_line('NB lig :'||v);
      7   END;
      8  /
     
    Trigger created.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL>  INSERT INTO wmc VALUES(1);
     
    1 row created.
     
    SQL>  INSERT INTO wmc VALUES(2);
     
    1 row created.
     
    SQL>  INSERT INTO wmc VALUES(3);
     
    1 row created.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> set serveroutput on
     
    SQL> DELETE wmc WHERE a = 1;
    NB lig :3
     
    1 row deleted.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Le problème de table en mutation apparaît dans le cadre d'un trigger for each row, et pas dans le cadre de statement trigger.
    Pour le pourquoi, il faut comprendre :
    Data Concurrency and Consistency

    Depuis la 11g, il est possible de créer des compound trigger qui permettent de contourner ce problème :
    Compound Triggers

    Une modification du modèle peut également permettre d'éviter de sélectionner la table en mutation.

  6. #6
    Membre très actif Avatar de goute
    Homme Profil pro
    Développeur éclectique
    Inscrit en
    Novembre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur éclectique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 224
    Par défaut
    Merci beaucoup c'est bien plus clair maintenant, c'est lié au for each row et ça me paraît bien plus logique.

    J'ai fait un petit recap des possibilités de SELECT par TRigger

    Nom : TRIGGER_SELECT.png
Affichages : 199
Taille : 33,1 Ko


    Merci encore !

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

Discussions similaires

  1. faire un selected dans un combobox
    Par Manau2000 dans le forum Struts 2
    Réponses: 0
    Dernier message: 04/08/2008, 13h18
  2. [PL\SQL] Faire un select dans un select
    Par dragonfly dans le forum SQL
    Réponses: 3
    Dernier message: 29/02/2008, 17h12
  3. [XSLT] peut on faire un select dans un xsl:key ?
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/10/2006, 13h06
  4. Faire un select dans un values
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 29/03/2006, 15h03
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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