Veröffentlicht am :

Bedingter Test von SQL-Tabellenbeschränkungen

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript definiert das Makro `%conditional`, das bei Ausführung sein Verhalten an das Vorhandensein der Ansicht `sashelp.vcncolu` anpasst. Wenn diese Ansicht vorhanden ist (was in der Regel auf eine Umgebung hindeutet, die das Management und die Abfrage von Beschränkungs-Metadaten unterstützt), erstellt das Makro eine Tabelle `work.example` mit einem zusammengesetzten Primärschlüssel, einer zusammengesetzten Unique-Beschränkung und einer Not-Null-Beschränkung. Anschließend wird `%mp_getconstraints` verwendet, um diese Beschränkungen zu extrahieren, und `%mp_assert`, um zu überprüfen, ob 6 Beschränkungsdatensätze zurückgegeben werden (die genaue Anzahl kann von der spezifischen Implementierung von `mp_getconstraints` für zusammengesetzte Schlüssel und Mehrfachbeschränkungen abhängen). Falls `sashelp.vcncolu` nicht vorhanden ist, wird die Tabelle `work.example` ohne Beschränkungen erstellt, und der Test validiert, dass die Extraktion der Beschränkungen 0 Datensätze zurückgibt, was das Fehlen von Unterstützung oder Sichtbarkeit von Beschränkungen in dieser Umgebung bestätigt.
Datenanalyse

Type : MIXTE


Das Skript interagiert mit einer Systemressource (`sashelp.vcncolu`) für seine bedingte Logik. Es erstellt dynamisch Testdaten (`work.example`) und Ergebnistabellen (`work.constraints`, `work.test_results`), um das Verhalten im Zusammenhang mit SQL-Beschränkungen zu validieren. Es werden keine externen Daten verwendet, die nicht vom Skript verwaltet werden.

1 Codeblock
MACRO
Erklärung :
Dieser Block definiert und führt das Makro `%conditional` aus. Er verwendet eine `%IF/%THEN/%ELSE`-Anweisung mit der Funktion `%SYSFUNC(EXIST())`, um das Vorhandensein der Systemansicht `sashelp.vcncolu` zu überprüfen. Diese Bedingung bestimmt, ob der Test ein Szenario mit definierten Tabellenbeschränkungen (wenn die Ansicht existiert) oder ein Szenario ohne Beschränkungen (wenn die Ansicht nicht existiert) auswerten soll. Der abschließende Aufruf `%conditional()` löst die Ausführung dieser Logik aus.
Kopiert!
1%macro conditional();
2 
3%IF %sysfunc(exist(sashelp.vcncolu,view))=1 %THEN %DO;
4 PROC SQL;
5 create TABLE work.example(
6 TX_FROM float FORMAT=datetime19.,
7 DD_TYPE char(16),
8 DD_SOURCE char(2048),
9 DD_SHORTDESC char(256),
10 constraint pk primary key(tx_from, dd_type,dd_source),
11 constraint unq unique(tx_from, dd_type),
12 constraint nnn not null(DD_SHORTDESC)
13 );
14 %mp_assertscope(SNAPSHOT)
15 %mp_getconstraints(lib=work,ds=example,outds=work.constraints)
16 %mp_assertscope(COMPARE)
17 
18 %mp_assert(
19 iftrue=(%mf_nobs(work.constraints)=6),
20 desc=OUTPUT TABLE work.constraints created with correct number of records,
21 outds=work.test_results
22 )
23%END;
24%ELSE %DO;
25 PROC SQL;
26 create TABLE work.example(
27 TX_FROM float FORMAT=datetime19.,
28 DD_TYPE char(16),
29 DD_SOURCE char(2048),
30 DD_SHORTDESC char(256)
31 );
32 %mp_assertscope(SNAPSHOT)
33 %mp_getconstraints(lib=work,ds=example,outds=work.constraints)
34 %mp_assertscope(COMPARE)
35 
36 %mp_assert(
37 iftrue=(%mf_nobs(work.constraints)=0),
38 desc=Empty TABLE created as constraints not supported,
39 outds=work.test_results
40 )
41%END;
42%mend conditional;
43 
44%conditional()
2 Codeblock
PROC SQL Data
Erklärung :
Dieser Codeblock wird ausgeführt, wenn die Ansicht `sashelp.vcncolu` erkannt wird. Er verwendet `PROC SQL`, um die Tabelle `work.example` mit den Spalten `TX_FROM`, `DD_TYPE`, `DD_SOURCE`, `DD_SHORTDESC` zu erstellen und wendet drei Beschränkungen an: einen zusammengesetzten Primärschlüssel (`pk`), einen zusammengesetzten Unique-Schlüssel (`unq`) und eine Not-Null-Beschränkung (`nnn`). Anschließend definieren die Makros `%mp_assertscope(SNAPSHOT)` und `%mp_assertscope(COMPARE)` einen Testkontext. `%mp_getconstraints` wird aufgerufen, um alle Beschränkungen von `work.example` in die Tabelle `work.constraints` zu extrahieren. Schließlich überprüft `%mp_assert`, dass die Tabelle `work.constraints` genau 6 Datensätze enthält, wodurch die korrekte Erkennung der Beschränkungen in dieser Umgebung validiert wird.
Kopiert!
1PROC SQL;
2 create TABLE work.example(
3 TX_FROM float FORMAT=datetime19.,
4 DD_TYPE char(16),
5 DD_SOURCE char(2048),
6 DD_SHORTDESC char(256),
7 constraint pk primary key(tx_from, dd_type,dd_source),
8 constraint unq unique(tx_from, dd_type),
9 constraint nnn not null(DD_SHORTDESC)
10 );
11 %mp_assertscope(SNAPSHOT)
12 %mp_getconstraints(lib=work,ds=example,outds=work.constraints)
13 %mp_assertscope(COMPARE)
14 
15 %mp_assert(
16 iftrue=(%mf_nobs(work.constraints)=6),
17 desc=OUTPUT TABLE work.constraints created with correct number of records,
18 outds=work.test_results
19 )
3 Codeblock
PROC SQL Data
Erklärung :
Dieser Codeblock wird ausgeführt, wenn die Ansicht `sashelp.vcncolu` nicht erkannt wird. Er erstellt die Tabelle `work.example` mit `PROC SQL`, jedoch ohne explizite Beschränkungen. Wie im vorherigen Fall legen die Makros `%mp_assertscope(SNAPSHOT)` und `%mp_assertscope(COMPARE)` den Testkontext fest, und `%mp_getconstraints` versucht, die Beschränkungen zu extrahieren. Die abschließende Assertion `%mp_assert` validiert, dass die Tabelle `work.constraints` leer ist (0 Datensätze), was bestätigt, dass in dieser Umgebung keine Beschränkungen erkannt oder unterstützt werden, was in diesem Szenario das erwartete Verhalten ist.
Kopiert!
1PROC SQL;
2 create TABLE work.example(
3 TX_FROM float FORMAT=datetime19.,
4 DD_TYPE char(16),
5 DD_SOURCE char(2048),
6 DD_SHORTDESC char(256)
7 );
8 %mp_assertscope(SNAPSHOT)
9 %mp_getconstraints(lib=work,ds=example,outds=work.constraints)
10 %mp_assertscope(COMPARE)
11 
12 %mp_assert(
13 iftrue=(%mf_nobs(work.constraints)=0),
14 desc=Empty TABLE created as constraints not supported,
15 outds=work.test_results
16 )
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 : Der Code verwendet Makros (`%mp_assert`, `%mp_getconstraints`, `%mf_nobs`, `%mp_assertscope`), die Teil des SASUnit-Frameworks sind. Die referenzierte Datei `macro_without_brief_tag.sas` weist ein Copyright 'Copyright 2010-2023 HMS Analytical Software GmbH' aus, den Herausgeber von SASUnit.