Bonjour,

Je veux écrire une procédure PL/SQL dans laquelle j'accède à des champs d'un rowtype passé en paramètre de manière dynamique (les noms des champs sont issus d'une table).

Le code ressemble à celui ci :

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
PROCEDURE "COMPARE_CHAMPS"
(
 p_anciennes_valeurs IN MATABLE%ROWTYPE,
 p_nouvelles_valeurs IN MATABLE%ROWTYPE
) IS
  ancienneVal VARCHAR(250);
  nouvelleVal VARCHAR(250);
BEGIN
    FOR maligne in (SELECT * FROM MATABLE_COLONNES) LOOP
      -- Pour chaque colonne à surveiller, on regarde si la valeur a changée.
     EXECUTE IMMEDIATE 'SELECT p_ancien_trade.'||TMCRow.TMC_NOM||' FROM DUAL' INTO ancienneVal;
     EXECUTE IMMEDIATE 'SELECT p_nouveau_trade.'||TMCRow.TMC_NOM||' FROM DUAL' INTO nouvelleVal;

      IF ancienneVal<>nouvelleVal THEN
       -- La valeur a changé, on insère la modif.
      END IF;
    END LOOP;	 
END COMPARE_TRADES;
Le problème est qu'en SQL dynamique, les variables ROWTYPE ne sont pas connues, il faut donc que je trouve un moyen d'accéder aux différents champs du rowtype sans connaitre leur nom à priori...

Quelqu'un a t il une idée?

D'avance merci