184
Chapitre 7 • Applications avancées en SQL
select 'insert into DETAIL values('
||''''||trim(NCOM)||''''||','
||''''||trim(NPRO)||''''||','
||trim(cast(QCOM as char(8)))
|| ');'
from DETAIL
. . . ce qui nous donne la liste des instructions de migration des données :
insert into DETAIL values('30178','CS464',25);
insert into DETAIL values('30179','PA60',20);
....
insert into DETAIL values('30188','CS464',180);
insert into DETAIL values('30188','PA45',22);
Remarque
Le procédé ne fonctionne que si la ligne ne contient aucune valeur null. Dans le
cas contraire en effet, l’expression tout entière prend la valeur null (section 6.10)
On se référera pour résoudre cette question à l’exercice 7.30.
7.4.2 Génération de migrateurs de données
S’il est possible d’écrire quelques requêtes de ce type pour résoudre un problème
ponctuel de conversion, il serait fastidieux de rédiger manuellement les centaines de
requêtes correspondant à une base de données de taille réelle.
Si on examine attentivement la requête de génération, on constate qu’elle
comporte des fragments constants et des fragments variables (en gras ci-dessous)
qui dépendent de la table à convertir.
select 'insert into DETAIL values('
||''''||trim(NCOM)||''''||','
||''''||trim(NPRO)||''''||','
||trim(cast(QCOM as char(8)))
|| ');'
from DETAIL
D’autre part, il apparaît que ces fragments variables sont des données contenues
dans les tables SYS_TABLE et SYS_COLUMN du catalogue de la figure 6.1. On
pourrait donc considérer les requêtes de génération comme des chaînes de caractères
résultant de l’extraction de données des tables du catalogue. Cette extraction ne
demande que des requêtes simples en apparence, mais qui réclament un peu plus
d’attention que d’habitude 16 .
Observons qu’une requête de génération est constituée de trois types de fragments. Le premier "select 'insert into DETAIL values('" apparaît en un
16. Nous allons en effet élaborer des requêtes SFW dont l’exécution produit un ensemble de
requêtes SFW dont l’exécution produit un ensemble de requêtes insert !
Précédent

- 184/436

Suivant