Veröffentlicht am :
Makro CREATION_INTERNE

Test des Tabellensperrmechanismus über Makros

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
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!
1%mp_coretable(LOCKTABLE,libds=work.controller)
2 
3%mp_assertcols(work.controller,
4 cols=lock_status_cd lock_lib lock_ds lock_user_nm lock_ref lock_pid
5 lock_start_dttm lock_end_dttm,
6 test=ALL,
7 desc=check all control columns exist
8)
2 Codeblock
DATA STEP Data
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!
1options dlcreatedir;
2LIBNAME tmp "%sysfunc(pathname(work))/tmp";
3DATA tmp.sometable;
4 x=1;
5RUN;
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!
1%mp_lockanytable(LOCK,lib=tmp,ds=sometable,ref=This Ref, ctl_ds=work.controller)
2 
3DATA work.checkds1;
4 checkval='SOMETABLE';
5RUN;
6%mp_assertcolvals(work.controller.lock_ds,
7 checkvals=work.checkds1.checkval,
8 desc=TABLE is captured in lock,
9 test=ANYVAL
10)
11 
12DATA work.checkds2;
13 checkval='LOCKED';
14RUN;
15%mp_assertcolvals(work.controller.lock_status_cd,
16 checkvals=work.checkds2.checkval,
17 desc=code is captured in lock,
18 test=ANYVAL
19)
4 Codeblock
Macro Data
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!
1%mp_lockanytable(UNLOCK,lib=tmp,ds=sometable,ref=bye, ctl_ds=work.controller)
2 
3DATA work.checkds3;
4 checkval='UNLOCKED';
5RUN;
6%mp_assertcolvals(work.controller.lock_status_cd,
7 checkvals=work.checkds3.checkval,
8 desc=Ref is captured in unlock,
9 test=ANYVAL
10)
5 Codeblock
Macro
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!
1%mp_lockanytable(UNLOCK,lib=no,ds=doesnotexist,ref=bye, ctl_ds=work.controller)
2 
3%mp_assert(
4 iftrue=(&syscc=0),
5 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.
Kopiert!
1%mp_assertscope(SNAPSHOT)
2%mp_lockanytable(LOCK,lib=tmp,ds=testscope,ref=This Ref, ctl_ds=work.controller)
3%mp_assertscope(COMPARE)
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.
Urheberrechtsinformationen : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de; Copyright © 2021, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0