1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-10 22:14:35 +00:00
Files
core/meta/mm_assignlib.sas
2021-04-03 21:30:51 +02:00

79 lines
1.9 KiB
SAS
Executable File

/**
@file
@brief Assigns a meta engine library using LIBREF
@details Queries metadata to get the library NAME which can then be used in
a libname statement with the meta engine.
usage:
%macro mp_abort(iftrue,mac,msg);%put &=msg;%mend;
%mm_assignlib(SOMEREF)
<h4> SAS Macros </h4>
@li mp_abort.sas
@param libref the libref (not name) of the metadata library
@param mAbort= If not assigned, HARD will call %mp_abort(), SOFT will
silently return
@returns libname statement
@version 9.2
@author Allan Bowe
**/
%macro mm_assignlib(
libref
,mAbort=HARD
)/*/STORE SOURCE*/;
%if %sysfunc(libref(&libref)) %then %do;
%local mp_abort msg; %let mp_abort=0;
data _null_;
length liburi LibName $200;
call missing(of _all_);
nobj=metadata_getnobj("omsobj:SASLibrary?@Libref='&libref'",1,liburi);
if nobj=1 then do;
rc=metadata_getattr(liburi,"Name",LibName);
/* now try and assign it */
if libname("&libref",,'meta',cats('liburi="',liburi,'";')) ne 0 then do;
putlog "&libref could not be assigned";
call symputx('msg',sysmsg(),'l');
if "&mabort"='HARD' then call symputx('mp_abort',1,'l');
end;
else do;
put (_all_)(=);
call symputx('libname',libname,'L');
call symputx('liburi',liburi,'L');
end;
end;
else if nobj>1 then do;
if "&mabort"='HARD' then call symputx('mp_abort',1);
call symputx('msg',"More than one library with libref=&libref");
end;
else do;
if "&mabort"='HARD' then call symputx('mp_abort',1);
call symputx('msg',"Library &libref not found in metadata");
end;
run;
%if &mp_abort=1 %then %do;
%mp_abort(iftrue= (&mp_abort=1)
,mac=&sysmacroname
,msg=&msg
)
%return;
%end;
%else %if %length(&msg)>2 %then %do;
%put NOTE: &msg;
%return;
%end;
%end;
%else %do;
%put NOTE: Library &libref is already assigned;
%end;
%mend;