Il vous est, peut-être, arrivé que suite à l’exécution d’un script de modification que vous réalisez que PowerAMC tente de supprimer des tables « tmp_ tables », des index et des séquences inexistants.
Si ces objets n’existent pas, cela provoque une erreur lors de l’exécution du script. Habituellement on n’aime pas que les scripts se terminent avec SQLERROR EXIT FAILURE et que cela mette ainsi un frein à un déploiement.
La définition originale de la commande DROP TABLE est: « DROP TABLE [% QUALIFIER%]% TABLE% [cascade constraints] »
Afin de corriger ce problème nous allons donc modifier la définition ci-dessous pour un bloc PL / SQL anonyme qui déclenchera une erreur lorsque nous aurons autre chose que ORA-00942 Table introuvable, etc.
— Définition qui permet de supprimer un objet seulement si ce dernier existe.
BEGIN
EXECUTE IMMEDIATE ‘drop table [%QUALIFIER%]%TABLE% [cascade constraints]’;
EXCEPTION
WHEN OTHERS THEN
— Si nous avons une erreur qui n’est pas à cause que l’objet n’existe pas
IF SQLCODE != -942 THEN
RAISE ;
END IF ;
END ;
D’une façon similaire nous allons modifier la définition suivante pour un bloc PL/SQL anonyme afin de supprimer les INDEX.
— Définition qui permet de supprimer un objet seulement si ce dernier existe.
BEGIN
EXECUTE IMMEDIATE ‘drop index [%QUALIFIER%]%INDEX%’;
EXCEPTION
WHEN OTHERS THEN
— Si nous avons une erreur qui n’est pas à cause que l’objet n’existe pas
IF SQLCODE != -1418 THEN
RAISE ;
END IF ;
END ;
Et nous allons faire la même chose pour les SEQUENCE
— Définition qui permet de supprimer un objet seulement si ce dernier existe.
BEGIN
EXECUTE IMMEDIATE ‘drop sequence [%QUALIFIER%]%SQNC%’;
EXCEPTION
WHEN OTHERS THEN
— Si nous avons une erreur et que ce n’est pas à cause que l’objet n’existe pas
IF SQLCODE != -2289 THEN
RAISE ;
END IF ;
END ;
Avec une grande flexibilité … vient une grande responsabilité. Portez attention lorsque vous modifier certains comportements fondamental de la génération de script à l’aide de PowerAMC.