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 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