| 12
 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
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 
 | 
(
s_requete in varchar2, s_nomTable in varchar2
)
return clob
/*'Construit un tableau a partir d''une requete, 
||la colonne 1 est celle des libelles, la seconde celle des donnees
||    - Parametres :
||        s_requete character varying : requete a traiter
||        s_listecolonne character varying : liste des colonnes
||    - Valeur retournee : 
||        tableau html -> tableau
*/
as
	s_html clob;
	s_colonne clob;
	s_libcol clob;
	s_typecol number;
	s_nomcol clob;
	s_precision varchar2(15);
	s_scale varchar2(15);
	s_valcol clob;
	s_valdate date;
	
	i integer DEFAULT 0;
	e_nblig integer DEFAULT 0;
  c_typeDate integer :=12;
  c_typeNumber integer :=2;
  c           NUMBER;
  d           NUMBER;
  col_cnt     PLS_INTEGER;
  rec_tab     dbms_sql.desc_tab;
  LC$Query    clob := s_requete;
  LN$MaxCol   PLS_INTEGER := 0 ;
BEGIN
   -- récupère le colonne de la requete --
    c := dbms_sql.open_cursor;
    dbms_sql.parse(c, LC$Query , dbms_sql.NATIVE);
    d := dbms_sql.execute(c);
    dbms_sql.describe_columns(c, col_cnt, rec_tab);
    LN$MaxCol := rec_tab.last ;
    -- si pas de ligne alors on renvoie une chaine vide
    IF LN$MaxCol = 0 THEN
		    RETURN '';
    END IF;
	  
  	  -- en tete du tableau
	  s_html := '<table border="1"><col span="2" width="200">';
	    
    For i in rec_tab.first .. rec_tab.last Loop
    
      s_nomcol := rec_tab(i).col_name ;      -- nom de la colonne
      s_typecol := rec_tab(i).col_type ;      -- type de la colonne
      s_precision := rec_tab(i).col_precision; -- masque numerique (precision)
      s_scale := rec_tab(i).col_scale; -- masque numerique (scale)
      
      -- ecriture de la rubrique dans le code HTML
		  IF s_typecol = c_typeDate THEN --DATE
			   -- lecture de la colonne et affectation dans une variable
			   s_valdate := '20091212'; --ICI JE NE SAIS PAS COMMENT FAIRE !!
			
			s_html := s_html || '<tr><td class="libelle">'  || s_libcol || '</td><td class="info">' || to_char(s_valdate) || '</td></tr>';
			
		ELSIF s_typecol = c_typeNumber THEN --NUMBER
			-- lecture de la colonne et affectation dans une variable
			s_valcol := '12105652';--ICI JE NE SAIS PAS COMMENT FAIRE !!
			
			-- recuperation du masque numerique
--ICI JE NE SAIS PAS COMMENT FAIRE !!
			
			s_html := s_html || '<tr><td class="libelle">' || s_libcol || '</td><td class="info" align="right">' || to_number(s_valcol, '999999999999') || '</td></tr>';
		ELSE
			-- lecture de la colonne et affectation dans une variable
			s_valcol := 'toto ...';
			IF s_valcol = '""' OR s_valcol = '" "'  OR trim(s_valcol) = '' OR (substr(s_valcol, 1, 1) = '"' AND substr(s_valcol, length(trim(s_valcol)), 1) = '"' AND trim(substr(s_valcol, 2, length(s_valcol) - 2)) = '') THEN
				s_html := s_html || '<tr><td class="libelle">'  || s_libcol || '</td><td class="info"> </td></tr>';
			ELSIF substr(s_valcol, 1, 1) = '"' AND substr(s_valcol, length(trim(s_valcol)), 1) = '"' THEN
				s_html := s_html || '<tr><td class="libelle">'  || s_libcol || '</td><td class="info">' || trim(substr(s_valcol, 2, length(s_valcol) - 2)) || '</td></tr>';
			ELSE
				s_html := s_html || '<tr><td class="libelle">'  || s_nomcol || '</td><td class="info">' || s_valcol || '</td></tr>';
			END IF;
			
		END IF;
    End loop ;
	s_html := s_html || '</table>';
	RETURN s_html;
end; | 
Partager