[PL/SQL] SQL dynamique + lecture valeur
Bonjour à tous.
Alors étant débutant en PL/SQL et ayant déjà pas mal utilisé ce forum pour faire mes premier pas..., je viens vers vos pour une question qui ne trouve pas réponse de mon côté.
J'ai une fonction pl/sql qui doit me retourner une chaine (varchar2 ou clob pour plus de sécurité) qui contient un tableau html. Ce tableau se construit à partir d'une requête dynamique et la fonction que je réalise doit récupérer les type des colonnes pour gérer l'alignement à gauche ou droite selon le type de donnée.
voici un exmple de tableau
Code:
1 2 3 4 5 6 7
|
COLONNE1 de mon tableau | COLONNE2 de mon tableau
----------------------------------------------------------------------------
Commentaire de la colonne1 | valeur de la colonne 1
Commentaire de la colonne2 | valeur de la colonne 2
Commentaire de la colonne3 | valeur de la colonne 3
... |
Voici le début de ma procédure qui déconne car elle ne me retourne pas ce que je souhaite.
Code:
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; |
Je ne sais pas comment récupérer le commentaire d'une colonne
et je n'arrive pas à récupérer ma valeur de colonne
merci d'avance de votre aide