La macro interagit principalement avec le serveur de métadonnées SAS pour gérer les Stored Processes. Elle ne consomme pas de données externes ni de jeux de données SASHELP directement pour son fonctionnement principal de suppression. Les données traitées sont des informations de métadonnées générées et gérées par le système SAS lui-même.
1 Bloc de code
DATA STEP (metadata_pathobj) et Macro IF
Explication : Ce bloc initialise la macro `mm_deletestp` et réalise une première étape de vérification. Il utilise une étape `DATA _NULL_` avec la fonction `metadata_pathobj` pour interroger le serveur de métadonnées. L'objectif est de déterminer si un 'StoredProcess' existe au chemin spécifié par le paramètre `&target`. Le type (`type`) et l'URI (`uri`) de l'objet trouvé sont stockés dans des variables macro. Si l'objet n'est pas identifié comme un 'ClassifierMap' (type interne pour les Stored Processes), une note est émise et la macro se termine, signalant l'absence du Stored Process.
Copié !
%macro mm_deletestp(
target=
)/*/STORE SOURCE*/;
/**
* Check STP does exist
*/
%local cmtype;
data _null_;
length type uri $256;
rc=metadata_pathobj("","&target",'StoredProcess',type,uri);
call symputx('cmtype',type,'l');
call symputx('stpuri',uri,'l');
run;
%if &cmtype ne ClassifierMap %then %do;
%put NOTE: No Stored Process found at ⌖
%return;
%end;
Explication : Ce bloc prépare le terrain pour la suppression en allouant deux filerefs temporaires (`__in` et `__out`) pour l'entrée et la sortie de la procédure `PROC METADATA`. Ensuite, une étape `DATA _NULL_` génère une chaîne XML formatée directement dans le fichier `__in`. Cette chaîne représente une requête de suppression de métadonnées ciblant l'objet 'ClassifierMap' dont l'ID est contenu dans la variable macro `&stpuri`, préparant ainsi l'instruction pour le serveur de métadonnées.
Copié !
filename __in temp lrecl=10000;
filename __out temp lrecl=10000;
data _null_ ;
file __in ;
put "<DeleteMetadata><Metadata><ClassifierMap Id='&stpuri'/>";
put "</Metadata><NS>SAS</NS><Flags>268436480</Flags><Options/>";
put "</DeleteMetadata>";
run ;
1
filename __in temp lrecl=10000;
2
filename __out temp lrecl=10000;
3
DATA _null_ ;
4
file __in ;
5
put "<DeleteMetadata><Metadata><ClassifierMap Id='&stpuri'/>";
6
put "</Metadata><NS>SAS</NS><Flags>268436480</Flags><Options/>";
7
put "</DeleteMetadata>";
8
RUN ;
3 Bloc de code
PROC METADATA
Explication : La procédure `PROC METADATA` est exécutée pour soumettre la requête XML précédemment générée (contenue dans `__in`) au serveur de métadonnées SAS. L'option `verbose` assure qu'un maximum d'informations sur l'exécution et le résultat de la requête est consigné, avec la sortie redirigée vers le fichier temporaire `__out`.
Copié !
proc metadata in=__in out=__out verbose;run;
1
PROC METADATA in=__in out=__out verbose;RUN;
4 Bloc de code
DATA STEP (Lecture de fichier)
Explication : Ce bloc est une simple étape `DATA _NULL_` qui a pour fonction de lire et d'afficher le contenu du fichier temporaire `__out` dans le journal SAS. Cela permet de visualiser la réponse détaillée du serveur de métadonnées suite à la tentative de suppression.
Copié !
/* list the result */
data _null_;infile __out; input; list; run;
1
/* list the result */
2
DATA _null_;
3
INFILE __out;
4
INPUT;
5
list;
6
7
RUN;
8
5 Bloc de code
SAS Global Statement
Explication : Ces déclarations `filename CLEAR` sont des instructions essentielles pour libérer proprement les filerefs temporaires `__in` et `__out` qui ont été utilisés. C'est une bonne pratique pour éviter la rétention inutile de ressources et les conflits potentiels dans des exécutions SAS ultérieures.
Copié !
filename __in clear;
filename __out clear;
1
filename __in clear;
2
filename __out clear;
6 Bloc de code
DATA STEP (metadata_pathobj) et Macro IF
Explication : Ce dernier bloc effectue une vérification cruciale après la tentative de suppression. Il utilise à nouveau `metadata_pathobj` pour s'assurer que le Stored Process (`&target`) a bien été retiré des métadonnées. Si l'objet est toujours trouvé et identifié comme un 'ClassifierMap', un message d'erreur est généré dans le journal, la variable système `syscc` est définie à 4 (indiquant une erreur), et la macro se termine pour signaler l'échec de la suppression. Le `%mend` marque la fin de la macro `mm_deletestp`.
Copié !
/**
* Check deletion
*/
%local isgone;
data _null_;
length type uri $256;
call missing (of _all_);
rc=metadata_pathobj("","&target",'Note',type,uri);
call symputx('isgone',type,'l');
run;
%if &isgone = ClassifierMap %then %do;
%put %str(ERR)OR: STP not deleted from ⌖
%let syscc=4;
%return;
%end;
%mend mm_deletestp;
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. Ce code est distribué sous les termes de la GNU General Public License (GPL) version 2 ou ultérieure.
« La macro mm_deletestp illustre une méthode de gestion avancée du cycle de vie des applications SAS 9. Contrairement aux suppressions manuelles via la console, l'utilisation de PROC METADATA avec des instructions XML permet une automatisation sécurisée et auditable du nettoyage de vos environnements. Le choix de l'objet technique ClassifierMap est ici crucial, car c'est le type de métadonnées qui définit l'existence même d'un Processus Stocké (Stored Process).
Recommandations et points de vigilance
L'importance des Drapeaux (Flags) : Dans la requête XML, la valeur <Flags>268436480</Flags> est déterminante. Ce masque binaire indique au serveur de métadonnées d'effectuer une suppression incluant potentiellement des objets dépendants ou des associations spécifiques. Une mauvaise configuration des flags pourrait laisser des "objets orphelins" (comme des métadonnées de paramètres ou des codes sources) dans le référentiel, polluant ainsi votre base de métadonnées sur le long terme.
Vérification d'Intégrité : La macro intègre une double validation : avant l'exécution avec metadata_pathobj et après avec une vérification de disparition. C'est une excellente pratique de programmation défensive. Notez l'utilisation de syscc=4 : cela permet d'alerter l'ordonnanceur de votre job qu'une anomalie s'est produite, même si le code SAS lui-même n'a pas crashé.
Portée de la suppression : Attention, cette macro supprime la définition du Stored Process dans les métadonnées. Si votre processus stocké pointe vers un fichier de code physique sur le serveur (fichier .sas), ce fichier restera présent sur le disque. Pour une suppression complète, il faudrait coupler cette macro avec une gestion du système de fichiers via FDELETE. »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.