Les données ne proviennent pas de tables SAS mais sont lues directement depuis le serveur de métadonnées SAS. La connexion est établie via les options 'metaserver', 'metaport', etc. Le script interroge l'API des métadonnées pour trouver des objets spécifiques.
1 Bloc de code
DATA STEP
Explication : Ce bloc DATA _NULL_ est le cœur du programme. Il ne crée aucune table SAS en sortie. Il initialise des variables, conserve la valeur de la macro 'MODE', puis construit une requête pour les métadonnées. Il utilise la fonction `metadata_resolve` pour compter le nombre d'objets 'ForeignKey' correspondant à la requête. S'il en trouve, il boucle sur chaque objet, récupère son URI, son nom, son ID et les informations de la table associée via `metadata_getnobj`, `metadata_getattr` et `metadata_getnasn`. Finalement, il affiche les informations dans le journal SAS et, si le mode est 'DELETE', il tente de supprimer l'objet avec `metadata_delobj` en vérifiant le code retour de l'opération.
Copié !
data _null_;
/* Initialize variables. */
length FK_id PT_id $17 type FK_uri PT_uri $50 PT_engine $64 PT_name $32 FK_name $60;
call missing ( of _character_ );
retain mode "&MODE";
/* Define a query for ForeignKey FKobjects that do not have a PartnerUniqueKey association */
FK_obj="omsobj:ForeignKey?ForeignKey[not(PartnerUniqueKey/*)]";
/* Determine how many foreign key objects meet the criteria */
FK_Count=metadata_resolve(FK_obj,type,FK_id);
put "NOTE: Found " FK_Count "ForeignKey objects that do not have an associated PartnerUniqueKey";
/* If any were found, iterate through each one to get the attributes and associations */
if FK_Count > 0 then do i = 1 to FK_Count;
/* Get the URI for the nth ForeignKey found */
FK_rc=metadata_getnobj(FK_obj,i,FK_uri);
/* Get the name and ID of the ForeignKey FKobject */
FK_rc=metadata_getattr(FK_uri,"Name",FK_name);
FK_rc=metadata_getattr(FK_uri,"Id",FK_id);
/* get the table name and id this ForeignKey is associated with */
PT_rc=metadata_getnasn(FK_uri,"Table",1,PT_uri);
if PT_rc > 0 then do;
/* Get the name and ID of the table. */
PT_rc=metadata_getattr(PT_uri,"SASTableName",PT_name);
PT_rc=metadata_getattr(PT_uri,"Id",PT_id);
end;
/* REPORT and DELETE */
put "NOTE: Found foreign key: " FK_name "with id: " FK_id "for table: " PT_name "with id: " PT_id;
if mode = "DELETE" then do;
FK_rc = metadata_delobj(FK_uri);
if FK_rc then put 'ERROR: metadata_delobj failed with return code ' FK_rc;
else put 'NOTE: Foreign key successfully deleted';
end;
end;
run;
put "NOTE: Found foreign key: " FK_name "with id: " FK_id "for table: " PT_name "with id: " PT_id;
33
IF mode = "DELETE"THENDO;
34
FK_rc = metadata_delobj(FK_uri);
35
IF FK_rc THEN put 'ERROR: metadata_delobj failed with return code ' FK_rc;
36
ELSE put 'NOTE: Foreign key successfully deleted';
37
END;
38
END;
39
RUN;
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.
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.