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 :

[PL/SQL] - Récupération du dernier enregistrement inséré


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [PL/SQL] - Récupération du dernier enregistrement inséré
    Bonjour,

    J'ai un trigger posé sur une table qui se déclenche quand un élément est inséré dans la table.

    Dans une procédure PL/SQL, j'aimerais savoir comment faire pour récupérer l'enregistrement qui vient d'être inséré (et uniquement celui-ci), et l'ajouter à une autre table. En effet, l'enregistrement ajouté peut se trouver n'importe où dans la table quand il est inséré, et il n'existe pas de champ qui me permettrait de récupérer cet enregistrement par une sélection (pas de champ 'chronologique').

    Merci pour votre aide.

  2. #2
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    J'ai l'impression que le trigger en question est un trigger "TABLE". Il suffirait de le modifier en trigger "ROW" afin de pouvoir recuperer les valeurs de l'enregistrement qui vient d'etre insere.

    Approximativement:

    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
     
    CREATE OR REPLACE TRIGGER trigger_name
    AFTER INSERT
    ON table_name
    FOR EACH ROW
     
    BEGIN
    INSERT INTO audit_table
    (
    ...
    )
    VALUES 
    (:NEW.colonne1
    ,:NEW.colonne2
    ...
    )
     
    END;

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    OK. J'essayerai, mais ce sera pour demain.

    Merci bien.

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonne intuition pour le TRIGGER ROW. J'ai pu vérifier que cela fonctionnait.

    Si je peux avoir un autre conseil. En fait, ce ne sont pas les valeurs de l'enregistrement inséré dans la table source que je veux récupérer, mais des valeurs de champ contenus dans d'autres tables accessibles via des jointures. En l'occurence, la table source contient un identifiant d'utilisateur et je veux récupérer son nom contenu dans une autre table.

    Pour cela, j'ai créé un curseur en y intégrant :NEW.Ident1=TABLE2.Ident1 comme élément de jointure. Mais cela ne fonctionne pas.

    En l'état, je suis obligé de positionner l'information dans une table intermédiaire, ce que je voudrais éviter.

    Tu aurais une idée pour réaliser la chose ?

    Merci bien.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    A force de chercher, j'ai finalement trouvé la solution.

    Pour ceux qui serait intéressé, je suis passé par un SELECT INTO avec jointure adhoc dans une variable temporaire (et non pas par un Curseur) avant de lancer le INSERT, afin de récupérer le nom correspondant à l'identifiant.

    Il m'aura fallu du temps, mais cela fonctionne.

    Merci pour le coup de main initial.

  6. #6
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Je n'ai pas une idee tres claire du probleme et de sa resolution, puisque il n'y a pas de difference entre un curseur et un select into. L'un va creer explicitement un curseur, l'autre va le creer implicitement.

    Tout au plus, je pense que d'une maniere ou d'une autre, le probleme etait sans doute lie a un fetch - au sein su trigger- de la table meme sur lequel etait base le trigger, ce qui est interdit.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 10/02/2015, 09h01
  2. Réponses: 4
    Dernier message: 28/02/2007, 11h54
  3. Réponses: 3
    Dernier message: 09/11/2006, 11h58
  4. dernier enregistrement inséré..
    Par questionneuse dans le forum Requêtes
    Réponses: 5
    Dernier message: 29/06/2006, 16h39
  5. Réponses: 5
    Dernier message: 01/02/2005, 17h29

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