Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
835 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle triggers] - mutating table > j'm'arrache les ch'veux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle triggers] - mutating table > j'm'arrache les ch'veux

n°899719
ZuL
Posté le 16-11-2004 à 11:31:23  profilanswer
 

jour'
 
mon probleme : j'ai une table fonctions qui contient des fonctions et des meta fonctions (fonctions de fonctions).
 
quand on modifie la propriété acces_internet de la meta fonction, ca doit mettre a jour l'acces internet des fonctions filles.
 
donc je fais mon trigger after insert sur la colonne et la....
 
- je suis passé pour le trigger > ca chie
- trigger qui appelle une procédure > ca chie
 
sachant qu'en méthodes j'ai essayé d'utiliser :  
- le pragma autonomous_transaction
- l'ignorage de l'exception.
 
mon dernier bout de code ressemble a ca :  (le trigger ne fait qu'appeller cette procédure) et bien évidemment, ca marche pas :/ (ca modofie qu'une ligne, ou alors rien du tout etc....)
 

Code :
  1. (cle_fi_fct in number)
  2. as
  3. /*pragma autonomous_transaction;*/
  4.   cursor curs_find_nodes (param1 number) is select cle_fi, acces_inter, acces_inter_calcule from info.fonction_info where cle_fi in
  5.    (select cle_fi_meta from info.rel_fonct_meta where cle_fi in
  6.     (select cle_fi from info.rel_fonct_meta where cle_fi_meta = param1)
  7.    );
  8.    rowItem curs_find_nodes%rowtype;
  9.    acces_inter number := 0;
  10.    cle_fi_p number := 0;
  11.    cursor curs_sons (param2 number) is select cle_fi from rel_fonct_meta where cle_fi_meta = param2;
  12.    TABLE_MUTANTE EXCEPTION;
  13.    PRAGMA EXCEPTION_INIT(TABLE_MUTANTE, -4091); 
  14.  
  15. begin
  16.   open curs_find_nodes(cle_fi_fct);
  17.   loop
  18.     fetch curs_find_nodes into rowItem;
  19.     exit when curs_find_nodes%notfound;
  20.     if rowItem.acces_inter = -1 or rowItem.acces_inter_calcule = -1 then
  21.       acces_inter := -1;
  22.     end if;
  23.   end loop;
  24.   close curs_find_nodes;
  25.   open curs_sons(cle_fi_fct);
  26.   loop
  27.     fetch curs_sons into cle_fi_p;
  28.     exit when curs_sons%notfound;
  29.     DBMS_OUTPUT.PUT_LINE('update info.fonction_info set acces_inter_calcule =' + acces_inter + 'where cle_fi =' + cle_fi_p);
  30.     update info.fonction_info set acces_inter_calcule = acces_inter where cle_fi = cle_fi_p;
  31.    /* P_ACCES_INTER(cle_fi_p);*/
  32.   end loop;
  33.   close curs_sons;
  34.  
  35.     EXCEPTION
  36.         WHEN TABLE_MUTANTE THEN
  37.         DBMS_OUTPUT.PUT_LINE('Fausse alerte'); 
  38.   /*RAISE_APPLICATION_ERROR(-20000, 'suppression interdite');*/
  39. end;

mood
Publicité
Posté le 16-11-2004 à 11:31:23  profilanswer
 

n°899857
jielbi
Posté le 16-11-2004 à 15:29:03  profilanswer
 

c'est normal que tu te tapes cette erreur: ton trigger, qui se déclenche sur des insert dans une table A, fait lui meme des select sur cette meme table A.
Pour t'en sortir et éviter cette erreur classique de table en mutation, soit tu réécris ton trigger (si c'est possible), soit tu passes par des tables intermédiaires.

n°899873
ZuL
Posté le 16-11-2004 à 15:41:37  profilanswer
 

ben le probleme c'est la recursivité sur une meme table.
 
donc reecrire le trigger > pour mettre quoi dedans ?
tables intermédiaires > pour naviguer en permanence entre deux tables ? :/

n°899881
jielbi
Posté le 16-11-2004 à 15:47:51  profilanswer
 

il ressemble à quoi ton trigger ?

n°899968
ZuL
Posté le 16-11-2004 à 17:21:28  profilanswer
 

il appelle juste la procédure collée au dessus.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle triggers] - mutating table > j'm'arrache les ch'veux

 

Sujets relatifs
[delphi] recuperer les index d'une tableOracle : dumpper la base complète ?
Pb avec Oracle: Comment on fait une fois que c'est installé?Supprimer une ligne d'une table MySQL
Couper la fin d'une image dans une table pour faire une barre de % ?Oracle logs
[php/mysql]Creation multi tabletable jusqu'aux extrémiés de l'écran
[Débutant] Erreur création table (MySQL)[ASP] Connexion avec Oracle 9i
Plus de sujets relatifs à : [Oracle triggers] - mutating table > j'm'arrache les ch'veux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR