Salut à tous,
je suis en train d'écrire un script PL/SQL qui détermine la taille des colonnes d'une table en utilisant un curseur qui parcourt les noms de 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
 
set serveroutput on ; 
 
declare
 
cursor c_colonne is  Select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME like 'ma_table' ;
nom_col USER_TAB_COLUMNS.COLUMN_NAME%TYPE ; 
taille_col integer :=0 ; 
 
begin
 dbms_output.put_line('start') ;
 
open c_colonne ;
loop
     Fetch c_colonne into nom_col ;
     select max(length(nom_col))  into taille_col from ma_table ; 
 
     dbms_output.put_line('-------nom_col : '|| nom_col||'----------------') ;
     dbms_output.put_line('nom_col : '|| nom_col||'  taille :'||taille_col) ;
    Exit when c_colonne%NOTFOUND;
end loop;
 
close c_colonne ;
dbms_output.put_line('end') ;
end ;

Mon script à un problème lors de l'instruction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select max(length(nom_col))  into taille_col from ma_table ;
Le script compte la taille de la chaine du nom de la colonne :
par exemple lorsque nom_col vaut col_1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select max(length(nom_col))  into taille_col from ma_table ;
taille_col vaut 5 car col_1 comporte 5 caractères.

Tout se passe comme ci le script interpretait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select max(length('col_1'))  into taille_col from ma_table ;
au lieu de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
select max(length(col_1))  into taille_col from ma_table ;
Comment est ce que je peux faire pour résoudre ce pb ?


merci d'avance.
ben