Attention : Dieser Code erfordert Administratorrechte.
Das Skript führt eine Reihe von Tests durch, um das Verhalten des Makros `%mp_lockanytable` zu validieren. Es beginnt mit der Erstellung einer Kontrolltabelle (`work.controller`) und validiert deren Struktur. Anschließend wird eine Testtabelle (`tmp.sometable`) erstellt, gesperrt und überprüft, ob der Status 'LOCKED' korrekt aufgezeichnet wird. Danach wird die Sperre aufgehoben und sichergestellt, dass der Status auf 'UNLOCKED' wechselt. Ein Fehlerfall wird ebenfalls getestet, indem versucht wird, eine nicht existierende Tabelle zu entsperren, wobei sichergestellt wird, dass das Programm nicht abbricht. Schließlich wird überprüft, ob nach dem Aufruf des Hauptmakros keine Makrovariablen verloren gehen.
Datenanalyse
Type : CREATION_INTERNE
Alle verwendeten Daten werden vom Skript selbst erstellt. Dies umfasst die zu sperrende Tabelle (`tmp.sometable`), die Sperr-Kontrolltabelle (`work.controller`) und mehrere kleine Prüftabellen (`work.checkds*`), die für die Assertions verwendet werden.
1 Codeblock
Macro Data
Erklärung : Das Makro `%mp_coretable` erstellt die Tabelle `work.controller`, die dazu dient, den Sperrstatus zu verfolgen. Das Makro `%mp_assertcols` wird anschließend verwendet, um zu überprüfen, ob diese Kontrolltabelle alle erforderlichen Spalten enthält.
Kopiert!
%mp_coretable(LOCKTABLE,libds=work.controller)
%mp_assertcols(work.controller,
cols=lock_status_cd lock_lib lock_ds lock_user_nm lock_ref lock_pid
lock_start_dttm lock_end_dttm,
test=ALL,
desc=check all control columns exist
)
Erklärung : Dieser Block aktiviert die dynamische Erstellung von Verzeichnissen, weist eine `tmp`-Bibliothek im temporären Ordner der Sitzung zu und erstellt dann eine Tabelle `tmp.sometable` für Testzwecke.
Kopiert!
options dlcreatedir;
libname tmp "%sysfunc(pathname(work))/tmp";
data tmp.sometable;
x=1;
run;
1
options dlcreatedir;
2
LIBNAME tmp "%sysfunc(pathname(work))/tmp";
3
DATA tmp.sometable;
4
x=1;
5
RUN;
3 Codeblock
Macro Data
Erklärung : Das Makro `%mp_lockanytable` wird aufgerufen, um die Tabelle `tmp.sometable` zu sperren. Validierungstabellen (`work.checkds1`, `work.checkds2`) werden erstellt, und das Makro `%mp_assertcolvals` überprüft, ob der Tabellenname und der Status 'LOCKED' korrekt in der Kontrolltabelle erfasst werden.
Kopiert!
%mp_lockanytable(LOCK,lib=tmp,ds=sometable,ref=This Ref, ctl_ds=work.controller)
data work.checkds1;
checkval='SOMETABLE';
run;
%mp_assertcolvals(work.controller.lock_ds,
checkvals=work.checkds1.checkval,
desc=table is captured in lock,
test=ANYVAL
)
data work.checkds2;
checkval='LOCKED';
run;
%mp_assertcolvals(work.controller.lock_status_cd,
checkvals=work.checkds2.checkval,
desc=code is captured in lock,
test=ANYVAL
)
Erklärung : Die Tabelle `tmp.sometable` wird über `%mp_lockanytable` entsperrt. Das Skript überprüft anschließend mit `%mp_assertcolvals`, ob der Status in der Kontrolltabelle korrekt auf 'UNLOCKED' aktualisiert wurde.
Kopiert!
%mp_lockanytable(UNLOCK,lib=tmp,ds=sometable,ref=bye, ctl_ds=work.controller)
data work.checkds3;
checkval='UNLOCKED';
run;
%mp_assertcolvals(work.controller.lock_status_cd,
checkvals=work.checkds3.checkval,
desc=Ref is captured in unlock,
test=ANYVAL
)
Erklärung : Dieser Block testet einen Fehlerfall, indem versucht wird, eine nicht existierende Tabelle zu entsperren. Das Makro `%mp_assert` validiert, dass dieser Vorgang ohne fatalen Fehler ausgeführt wird, indem überprüft wird, ob der Systemrückgabecode `&syscc` bei 0 bleibt.
Kopiert!
%mp_lockanytable(UNLOCK,lib=no,ds=doesnotexist,ref=bye, ctl_ds=work.controller)
%mp_assert(
iftrue=(&syscc=0),
desc=Ability to unlock a table that was never locked,
outds=work.test_results
)
desc=Ability to unlock a TABLE that was never locked,
6
outds=work.test_results
7
)
6 Codeblock
Macro
Erklärung : Dieser Block testet das 'Leck' von Makrovariablen. `%mp_assertscope(SNAPSHOT)` erstellt einen Schnappschuss der vorhandenen Makrovariablen, `%mp_lockanytable` wird ausgeführt, und anschließend vergleicht `%mp_assertscope(COMPARE)` den neuen Zustand mit dem vorherigen, um sicherzustellen, dass keine lokalen Makrovariablen global erstellt wurden.
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.