Publié le :

Macro pour la suppression de contraintes de table

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
La macro `mp_deleteconstraints` est conçue pour automatiser le processus de suppression de contraintes de tables SAS©. Elle prend en entrée un jeu de données SAS© (`inds`) qui contient les informations détaillées sur les contraintes à cibler (telles que la bibliothèque, le nom de la table et le nom de la contrainte). Après un tri préalable du jeu de données d'entrée, un `DATA STEP` parcourt ces informations pour construire les instructions SQL `ALTER TABLE ... DROP CONSTRAINT` correspondantes. L'exécution de ces instructions est conditionnée par la valeur du paramètre `execute`. Si `execute` est défini sur 'YES', la macro utilise `CALL EXECUTE` pour soumettre les commandes SQL au serveur, modifiant ainsi la structure des tables. Le jeu de données de sortie (`outds`) contient les instructions SQL générées, qu'elles aient été exécutées ou non.
Analyse des données

Type : INTERNE


La macro `mp_deleteconstraints` traite un jeu de données SAS qui doit être fourni via le paramètre `inds=`. Ce jeu de données est généralement le résultat d'une autre procédure ou macro SAS (comme `mp_getconstraints` mentionné dans l'en-tête), qui extrait les métadonnées de contraintes de tables SAS existantes. L'exemple d'utilisation dans les commentaires suggère que le jeu de données d'entrée peut être créé à partir de tables temporaires (`work.example`), ce qui indique une gestion de données interne au système SAS plutôt qu'une importation directe de fichiers externes.

1 Bloc de code
Macro Définition et PROC SORT
Explication :
Ce bloc initialise la macro `mp_deleteconstraints` et définit ses trois paramètres : `inds` pour le jeu de données d'entrée des contraintes, `outds` pour le jeu de données de sortie trié, et `execute` pour contrôler l'exécution des commandes SQL. La procédure `PROC SORT` est ensuite utilisée pour trier le jeu de données d'entrée (`&inds`) selon les variables `libref`, `table_name` et `constraint_name`. Le jeu de données trié est enregistré sous le nom spécifié par `&outds`.
Copié !
1%macro mp_deleteconstraints(inds=mp_getconstraints
2 ,outds=mp_deleteconstraints
3 ,execute=NO
4)/*/STORE SOURCE*/;
5 
6PROC SORT DATA=&inds out=&outds;
7 BY libref table_name constraint_name;
8RUN;
2 Bloc de code
DATA STEP
Explication :
Ce `DATA STEP` traite le jeu de données trié, générant une instruction SQL `ALTER TABLE ... DROP CONSTRAINT` pour chaque contrainte unique (détectée par `first.constraint_name`). La variable `drop_statement` est créée pour stocker cette instruction. Si le paramètre `execute` de la macro est 'YES', la commande `CALL EXECUTE('proc sql;')` est utilisée une seule fois au début du `DATA STEP` pour ouvrir un bloc SQL, et `CALL EXECUTE(drop_statement)` exécute chaque instruction de suppression de contrainte générée. Le `DATA STEP` écrit également les instructions générées dans le jeu de données de sortie `&outds`.
Copié !
1DATA &outds;
2 SET &outds;
3 BY libref table_name constraint_name;
4 LENGTH drop_statement $500;
5 IF _n_=1 and "&execute"="YES" THEN call execute('proc sql;');
6 IF first.constraint_name THEN DO;
7 drop_statement=catx(" ","alter table",libref,".",table_name
8 ,"drop constraint",constraint_name,";");
9 OUTPUT;
10 IF "&execute"="YES" THEN call execute(drop_statement);
11 END;
12RUN;
13 
14%mend mp_deleteconstraints;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright (c) 2001-2006 Rodney Sparapani


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« La macro mp_deleteconstraints est un outil d'administration indispensable pour gérer dynamiquement l'intégrité référentielle au sein d'une bibliothèque SAS. En s'appuyant sur un jeu de données de métadonnées, elle transforme une tâche de maintenance potentiellement complexe et manuelle en un processus automatisé, réversible et auditable. »