Bonjour,
Je voudrais identifier quelles sont les colonnes qui sont utilisées dans un Select.
Par exemple savoir que les colonnes COL1, COL2 et COL10 ont été accédées par l'ordre SQL suivant
et pas les autres colonnes de ma table (COL1 à COL20).
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT COL1, COL2, COL10 FROM TAB1;
Comme il n'y a pas de trigger sur Select je suis un peu embêté pour tracer ces ordres.
Je pourrais utiliser DBMS_FGA pour tracer l'ordre SQL mais je vais avoir ça : exemple avec la table DEPT.
Dans SQL_TEXT j'ai l'ordre SQL mais je voudrais seulement les colonnes.
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 /* Script de creation d'un audit avec resultats en XML et prise en compte du SELECT. */ BEGIN DBMS_FGA.ADD_POLICY ( object_schema => 'USER01', object_name => 'DEPT', policy_name => 'AUDIT04', statement_types => 'SELECT', audit_trail => DBMS_FGA.XML + DBMS_FGA.EXTENDED, audit_column_opts => DBMS_FGA.ANY_COLUMNS); END; / Test de Select SQL> select loc from dept; LOC ------------- NEW YORK DALLAS CHICAGO BOSTON Vérification de l'audit du Select. SQL> select policy_name, OBJECT_SCHEMA, OBJECT_NAME, SQL_TEXT from V$XML_AUDIT_TRAIL; POLICY_NAME OBJECT_SCHEMA OBJECT_NAME SQL_TEXT ------------------------------------------------------------------------------------------------------------------------- AUDIT04 USER01 DEPT select loc from dept
Je pourrais utiliser INSTR, SUBSTR pour isoler la chaîne de caractères entre SELECT et FROM mais c'est lourd puis après il faudra séparer les noms des colonnes en sa basant sur les virgules... mais bon, c'est une possibilité.
Si vous avez une idée plus simple, je suis preneur.
Partager