7.4 La génération de code
185
© Dunod – La photocopie non autorisée est un délit.
seul exemplaire et dépend de la table SYS_TABLE. Les fragments du deuxième type
définissent chacun un constructeur de valeur qui dépend du type de la colonne
correspondante; ils dérivent des informations de la table SYS_COLUMN. Le troisième et dernier fragment "|| ');' from DETAIL" représente la clôture la requête
et dépend de la table SYS_TABLE. Nous produirons ces fragments au moyen de
trois requêtes qui rangent leur résultat dans une table de travail comportant deux
colonnes : SEQ qui définit le type de fragment (1, 2 ou 3) et LTEXTE qui contient le
fragment lui-même.
insert into LIGNE
select 1, 'select ''insert into '||TNAME||' values('''
from
SYS_TABLE
where TNAME = 'DETAIL';
insert into LIGNE
select 2,
case CTYPE
when 'char' then
'||''''''''||trim('
||CNAME
||')||''''''''||'','''
when 'decimal' then
'||trim(cast('
||CNAME
||' as char('
||cast(CLENGTH as char(4))
||'))),'
else '*** type inconnu ***'
from SYS_COLUMN
where TNAME = 'DETAIL'
and
T.TNAME = C.TNAME;
insert into LIGNE
select 3,'|| '');'' from '||TNAME
from SYS_TABLE
where TNAME = 'DETAIL';
Il reste alors à reconstituer la requête de conversion en extrayant les fragments dans
l’ordre des valeurs croissantes de SEQ :
select LTEXTE
from
LIGNE
order by SEQ
Les lignes qui s’affichent sont redirigées vers un fichier de texte qui contiendra la
liste des requêtes de génération des instructions de conversion pour toutes les tables
concernées. On peut aisément simplifier la démarche par une procédure SQL qui
exécute les requêtes ci-dessus pour chaque valeur de TNAME de SYS_TABLE.
Précédent

- 185/436

Suivant