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 :

[Abandon] Passer :NEW à un procedure


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [Abandon] Passer :NEW à un procedure
    Bonjour,

    Dans un trigger, je voudrais appeler un procedure et lui passer en paramètre la ligne en cours d'insertion/modification/suppression (:NEW ou :OLD). Un truc du genre:
    create or replace procedure MA_PROC(
    ???
    ) as
    begin
    ...
    end

    create or replace trigger MON_TRIGGER
    after insert on MA_TABLE
    for each row
    begin
    ...
    MA_PROC(:NEW);
    ...
    end


    Est-ce que c'est possible?

    Si oui, quel est le type de cette espèce de variable :NEW/:OLD? J'ai essayé un MA_TABLE%rowtype sans succès.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Met dans un package un SubType Ma_Table%rowtype et ta procédure et utilisez les dans le trigger.

  3. #3
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249
    Par défaut
    Non, ce n'est pas possible comme fonction (:new), malheureusement (asktom).

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    create table tx (
      a number,
      b number);
    
    create or replace package txp as
      subtype txrowtype is tx%rowtype;
      procedure x (a in txrowtype);
    end;
    /
    
    create or replace package body txp as
      procedure x (a in txrowtype) is
      begin
        null;
      end;
    end;
    /
    
    create or replace trigger txtg
      before insert
      on tx
      for each row
    declare
      r txp.txrowtype;
    begin
      -- txp.x (:new); pas possible!!!!
      r.a := :new.a;
      r.b := :new.b;
      txp.x (r);
    end;
    /
    DAB

  4. #4
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses.
    Je vais tâcher de contourner le problème.

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par DAB.cz Voir le message
    Non, ce n'est pas possible comme fonction (:new), malheureusement (asktom).

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    create table tx (
      a number,
      b number);
    
    create or replace package txp as
      subtype txrowtype is tx%rowtype;
      procedure x (a in txrowtype);
    end;
    /
    
    create or replace package body txp as
      procedure x (a in txrowtype) is
      begin
        null;
      end;
    end;
    /
    
    create or replace trigger txtg
      before insert
      on tx
      for each row
    declare
      r txp.txrowtype;
    begin
      -- txp.x (:new); pas possible!!!!
      r.a := :new.a;
      r.b := :new.b;
      txp.x (r);
    end;
    /
    DAB
    J'aurais jamais imaginé que quelque puisse écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -- txp.x (:new); pas possible!!!!
    Si non ton example
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
      r.a := :new.a;
      r.b := :new.b;
      txp.x (r);
    ...
    montre bien que c'est possible

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/09/2007, 11h44
  2. Réponses: 1
    Dernier message: 12/05/2006, 16h53
  3. Faire passer une table en paramètre pour une procedure
    Par samplaid dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/02/2006, 11h26
  4. [VB] Passer plusieurs parametres à une procedure stockée
    Par wolflinger dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/04/2005, 14h13
  5. passer un tableau a une procedure stockee
    Par graphicsxp dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/04/2005, 11h39

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