Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...


Ancre
Top_of_Syntaxe_du_fichier_htm
Top_of_Syntaxe_du_fichier_htm

Syntaxe du fichier
Le fichier passé DOIT commencer par « <execute> ».
A la fin du fichier, on trouve « <executeDropOldColumns> ».
Les instructions qui suivent permettent de supprimer les tables suffixées par « _oldcolumns »
Ces tables sont issues d'une synchronisation réussie avec des suppressions de champs. Elles ne sont exécutées quei si le paramètre « SupprimerTableSauvegarde » vaut 1 ou si la case « Supprimer les tables de sauvegarde des champs supprimés » est cochée (Cf. rubrique Description de la synchronisation du schéma de la base).

Info

Consultez le tableau des versions maintenues dans l’espace produit pour vérifier la compatibilité de la version Harmony et la compatibilité de la base cible MS SQL Server, IBM DB2


La syntaxe du fichier contenant le script dépend du moteur de base de données :

  1. Microsoft SQL Server La première instruction, « USE <BASESQL> ; » est obligatoire et doit rester inchangée. « <BASESQL> » sera automatiquement remplacé par le nom de la base. Le reste est du Transact-SQL standard (http://msdn.microsoft.com/fr-fr/library/ms189826%28v=SQL.90%29.aspx

...

  1. ).

  2. IBM DB2. Pour ce moteur de base de données, toutes les requêtes doivent se trouver dans des procédures. De plus, la balise « <execute> » est obligatoire après chaque création, exécution et suppression de procédure. Attention : la procédure DOIT porter le nom « proc_migration ». Pour le reste, la syntaxe reste assez proche de celle du PL/SQL d'Oracle (http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/sqlp/rbafykickoff.htm ).


Ancre
Top_of_Exemple_SQL_Microsoft_htm
Top_of_Exemple_SQL_Microsoft_htm

Exemple de script SQL Microsoft
<execute>
USE <BASESQL> ;
/* Requête simple pour récupérer la valeur d'un ancien champ */
/* substring sert à tronquer la valeur car le nouveau champ est plus court que l'ancien */
update dbo.soc set chemincod = (select substring(o.winchn, 0, 20) from dbo.soc_oldcolumns o where o.soc_id = dbo.soc.soc_id);
/* Requête avec un test utilisant un curseur */
/* Déclaration des variables et des curseurs */
DECLARE @mres_id int;
DECLARE @n_ce4 char(1);
DECLARE @resqte numeric(12,3);
DECLARE c_mres CURSOR FOR
select mres_id, resqte from dbo.mres order by mres_id;
/* Mise à jour avec parcours d'un curseur */
open c_mres;
fetch next from c_mres into @mres_id, @resqte;
while @@fetch_status = 0
begin
/* positionne ce4 en fonction de resqte */
if @resqte != 0
set @n_ce4 = 1;
else
set @n_ce4 = 0;
update dbo.mres set ce4 = @n_ce4 where mres_id = @mres_id;
fetch next from c_mres into @mres_id, @resqte;
end
/* Suppression des tables suffixées par "_oldcolumns" */
<executeDropOldColumns>
DECLARE @table_name sysname;
DECLARE cur_table CURSOR FOR
SELECT name FROM sysobjects WHERE type='U' and lower(name) like '%_oldcolumns';
open cur_table;
fetch next from cur_table
into @table_name;
while @@fetch_status = 0
begin
exec('DROP TABLE dbo.' + @table_name);
fetch next from cur_table
into @table_name;
end
close cur_table;
deallocate cur_table;
Ancre
Top_of_Exemple_de_script_ORACLE
Top_of_Exemple_de_script_ORACLE

Exemple de script ORACLE
<execute>
/* Déclaration des variables et des curseurs */
DECLARE
n_ce4 char(1);
mres_id int;
resqte int;
CURSOR c_mres IS select mres_id, resqte from <BASESQL>.mres ORDER BY mres_id;
BEGIN
/* Requête simple pour récupérer la valeur d'un ancien champ */
/* substr sert à tronquer la valeur car le nouveau champ est plus court que l'ancien */
/* pour le substr d'oracle, le <start_position> (2ème paramètre) commence à 1 */
UPDATE <BASESQL>.soc SET chemincod = (SELECT substr(o.winchn, 1, 20) FROM <BASESQL>.soc_oldcolumns o WHERE o.soc_id = <BASESQL>.soc.soc_id);
COMMIT;
/* Requête avec un test utilisant un curseur */
OPEN c_mres;
LOOP
FETCH c_mres INTO mres_id, resqte;
EXIT WHEN c_mres%NOTFOUND;
/* positionne ce4 en fonction de resqte */
IF resqte != 0 THEN
n_ce4 := 1;
ELSE
n_ce4 := 0;
END IF;
EXECUTE IMMEDIATE('update <BASESQL>.mres set ce4 = ' || n_ce4 || ' where mres_id = ' || mres_id);
END LOOP;
COMMIT;
CLOSE c_mres;
/* Suppression des tables suffixées par "_oldcolumns" */
<executeDropOldColumns>
DECLARE
table_name user_tables.table_name%TYPE;
CURSOR cur_table IS SELECT table_name FROM user_tables where lower(table_name) like '%_oldcolumns';
BEGIN
OPEN cur_table;
LOOP
FETCH cur_table INTO table_name;
EXIT WHEN cur_table%NOTFOUND;
EXECUTE IMMEDIATE('DROP TABLE <BASESQL>.' || table_name);
END LOOP;
COMMIT;
CLOSE cur_table;
END;
Ancre
Top_of_Exemple_de_script_IBM_DB2
Top_of_Exemple_de_script_IBM_DB2

Exemple de script IBM DB2
<execute>
/* Requête simple pour récupérer la valeur d'un ancien champ */
/* substring sert à tronquer la valeur car le nouveau champ est plus court que l'ancien */
/* Création de la procédure */
CREATE PROCEDURE <BASESQL>.proc_migration
LANGUAGE SQL
BEGIN
UPDATE <BASESQL>.soc SET chemincod = (SELECT substring(o.winchn, 0, 20) FROM <BASESQL>.soc_oldcolumns o WHERE o.soc_id = <BASESQL>.soc.soc_id);
end
<execute>
/* Lancement de la procédure */
call <BASESQL>.proc_migration()
<execute>
/* Suppression de la procédure */
drop procedure <BASESQL>.proc_migration
<execute>
/* Création de la procédure avec parcours de curseur */
/* Requête avec un test */
CREATE PROCEDURE <BASESQL>.proc_migration
LANGUAGE SQL
BEGIN
declare mres_id integer;
declare resqte numeric(12,3);
declare n_ce4 char(1);
declare req_sql varchar(150); /* adapter la taille de la variable en fonction de la requête */
declare sqlcode integer default 0;
DECLARE c_mres CURSOR FOR
select mres_id, resqte from <BASESQL>.mres order by mres_id;
open c_mres;
fetch from c_mres into mres_id, resqte;
while (SQLCODE=0) DO
/* positionne ce4 en fonction de resqte */
if resqte != 0 then
set n_ce4 = 1;
else
set n_ce4 = 0;
end if;
set req_sql = 'update <BASESQL>.mres set ce4 = ' || n_ce4 || ' where mres_id = ' || mres_id;
EXECUTE IMMEDIATE req_sql;
fetch from c_mres
into mres_id, resqte;
end while;
close c_mres;
end
<execute>
call <BASESQL>.proc_migration()
<execute>
drop procedure <BASESQL>.proc_migration
<execute>
/* Suppression des tables suffixées par "_oldcolumns" */
<executeDropOldColumns>
CREATE PROCEDURE <BASESQL>.proc_migration
LANGUAGE SQL
BEGIN
DECLARE table_name varchar(128);
DECLARE sqlcode INTEGER DEFAULT 0;
DECLARE req_sql varchar(150);
DECLARE cur_table CURSOR FOR SELECT table_name FROM qsys2.systables where lower(table_name) like '%_oldcolumns' and lower(table_owner) = lower('<BASESQL>');
open cur_table;
fetch from cur_table into table_name;
WHILE (SQLCODE=0) DO
set req_sql = 'drop table <BASESQL>.' || table_name;
EXECUTE IMMEDIATE req_sql;
FETCH cur_table into table_name;
END WHILE;
close cur_table;
END
<execute>
call <BASESQL>.proc_migration()
<execute>
drop procedure <BASESQL>.proc_migration
<execute>
Ancre
Top_of_D_claration_des_index_dan
Top_of_D_claration_des_index_dan