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 :

Récupérer ligne entière dans trigger


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Par défaut Récupérer ligne entière dans trigger
    Bonjour,
    Je bloque sur un problème dans mon trigger.
    J'ai un table qui contient des utilisateurs avec une trentaine de champs (numéro personne, téléphone, manager,...)
    J'exporte ces données depuis excel.
    Je voudrais créér un trigger qui si l'utilisateur existe déjà fait juste un update.
    Voici le code de mon trigger :
    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
    create or replace
    trigger BIER_USER
    BEFORE INSERT on USER 
    FOR EACH ROW
    declare 
    	nb_user integer;
    	exist_user exception;
    begin
    	select count(core_id) into nb_user
    	from resmgt_mot_user
    	where core_id = :new.core_id;
    	
    	if nb_user > 0 then
    		raise exist_user;
    	end if;
    	
    	EXCEPTION
        --If the person is already register in the database then update
        WHEN exist_user THEN
        	pkg_resmgt.update_user(:new);
    end;
    ma procédure update_user prend en paramètre une variable de type user%ROWTYPE. Seulement je ne trouve pas comment récupérer toute la ligne qui devrait être insérée... sur la ligne colorée en rouge, à la compilation il me dit : "Error(21,40): PLS-00049: bad bind variable 'NEW'". J'ai essayé :new.*, :new.all, :new.row, rien n'y fait...

    Quelqu'un aurait une idée ???

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ce n'est pas possible, tu dois updater toutes les colonnes.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Par défaut
    vu que je fais l'update sur la même table que li'nsert, je suis obligée de passer par une procédure sinon j'ai l'erreur "table mutante". ca veut donc dire que ma procédure doit prendre en paramètre les 30 champs ?? Où y'a-t-il une solution plus simple ?

    Merci

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par Taoueret
    vu que je fais l'update sur la même table que li'nsert, je suis obligée de passer par une procédure sinon j'ai l'erreur "table mutante". ca veut donc dire que ma procédure doit prendre en paramètre les 30 champs ?? Où y'a-t-il une solution plus simple ?

    Merci
    oui, la commande MERGE en lieu et place d'INSERT

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par orafrance
    oui, la commande MERGE en lieu et place d'INSERT

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Par défaut
    Merci beaucoup pour ces réponses constructives !! C'est vrai que j'avais oublié le merge J'ai pas tellement l'habitude de l'utiliser en même temps... Merci encore

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu dois créer un enregistrement, style

    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
    create or replace
    trigger BIER_USER
    BEFORE INSERT on USER 
    FOR EACH ROW
    declare 
       rec user%rowtype;
    begin
       rec.col1 := :new.col1;
       rec.col2 := :new.col2;
       rec.col3 := :new.col3;
       rec.col30 := :new.col30;
       pkg_resmgt.update_user(rec);
    end;
    /
    je ne vois pas plus simple

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

Discussions similaires

  1. effacer une ligne entière dans une session
    Par keokaz dans le forum Langage
    Réponses: 11
    Dernier message: 23/12/2009, 23h51
  2. Récupérer ligne entière (.xls)
    Par urban45 dans le forum Pentaho
    Réponses: 1
    Dernier message: 10/07/2009, 19h54
  3. Sélection de la ligne entière dans un TreeView
    Par Neolight dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 22/04/2009, 17h19
  4. Réponses: 3
    Dernier message: 21/04/2009, 14h03
  5. Afficher la ligne entière dans une listView Sans les headers
    Par Msysteme dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/02/2009, 12h56

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