El script define la macro `%conditional` que, al ejecutarse, adapta su comportamiento en función de la existencia de la vista `sashelp.vcncolu`. Si esta vista está presente (generalmente indicativa de un entorno que soporta la gestión y la consulta de metadatos de restricciones), la macro crea una tabla `work.example` con una clave primaria compuesta, una restricción única compuesta y una restricción no nula. Luego utiliza `%mp_getconstraints` para extraer estas restricciones y `%mp_assert` para verificar que se devuelven 6 registros de restricciones (el número exacto puede depender de la implementación específica de `mp_getconstraints` para claves compuestas y restricciones múltiples). Si `sashelp.vcncolu` está ausente, la tabla `work.example` se crea sin restricciones, y la prueba valida que la extracción de restricciones devuelve 0 registros, confirmando la ausencia de soporte o visibilidad de las restricciones en ese entorno.
Análisis de datos
Type : MIXTE
El script interactúa con un recurso del sistema (`sashelp.vcncolu`) para su lógica condicional. Crea dinámicamente datos de prueba (`work.example`) y tablas de resultados (`work.constraints`, `work.test_results`) para validar los comportamientos relacionados con las restricciones SQL. No se utilizan datos externos no gestionados por el script.
1 Bloque de código
MACRO
Explicación : Este bloque define y ejecuta la macro `%conditional`. Utiliza una instrucción `%IF/%THEN/%ELSE` con la función `%SYSFUNC(EXIST())` para verificar la presencia de la vista del sistema `sashelp.vcncolu`. Esta condición determina si la prueba debe evaluar un escenario con restricciones de tabla definidas (si la vista existe) o un escenario sin restricciones (si la vista no existe). La llamada final `%conditional()` activa la ejecución de esta lógica.
desc=Empty TABLE created as constraints not supported,
39
outds=work.test_results
40
)
41
%END;
42
%mend conditional;
43
44
%conditional()
2 Bloque de código
PROC SQL Data
Explicación : Este bloque de código se ejecuta cuando se detecta la vista `sashelp.vcncolu`. Utiliza `PROC SQL` para crear la tabla `work.example` con las columnas `TX_FROM`, `DD_TYPE`, `DD_SOURCE`, `DD_SHORTDESC`, y aplica tres restricciones: una clave primaria compuesta (`pk`), una clave única compuesta (`unq`), y una restricción no nula (`nnn`). Luego, las macros `%mp_assertscope(SNAPSHOT)` y `%mp_assertscope(COMPARE)` definen un contexto de prueba. Se llama a `%mp_getconstraints` para extraer todas las restricciones de `work.example` en la tabla `work.constraints`. Finalmente, `%mp_assert` verifica que la tabla `work.constraints` contiene exactamente 6 registros, validando así la detección correcta de las restricciones en este entorno.
¡Copiado!
proc sql;
create table work.example(
TX_FROM float format=datetime19.,
DD_TYPE char(16),
DD_SOURCE char(2048),
DD_SHORTDESC char(256),
constraint pk primary key(tx_from, dd_type,dd_source),
constraint unq unique(tx_from, dd_type),
constraint nnn not null(DD_SHORTDESC)
);
%mp_assertscope(SNAPSHOT)
%mp_getconstraints(lib=work,ds=example,outds=work.constraints)
%mp_assertscope(COMPARE)
%mp_assert(
iftrue=(%mf_nobs(work.constraints)=6),
desc=Output table work.constraints created with correct number of records,
outds=work.test_results
)
desc=OUTPUTTABLE work.constraints created with correct number of records,
18
outds=work.test_results
19
)
3 Bloque de código
PROC SQL Data
Explicación : Este bloque de código se ejecuta cuando no se detecta la vista `sashelp.vcncolu`. Crea la tabla `work.example` utilizando `PROC SQL` pero sin ninguna restricción explícita. Al igual que en el caso anterior, las macros `%mp_assertscope(SNAPSHOT)` y `%mp_assertscope(COMPARE)` establecen el contexto de prueba, y `%mp_getconstraints` intenta extraer las restricciones. La aserción final `%mp_assert` valida que la tabla `work.constraints` está vacía (0 registros), confirmando que no se detectan ni se admiten restricciones en este entorno, lo cual es el comportamiento esperado en este escenario.
¡Copiado!
proc sql;
create table work.example(
TX_FROM float format=datetime19.,
DD_TYPE char(16),
DD_SOURCE char(2048),
DD_SHORTDESC char(256)
);
%mp_assertscope(SNAPSHOT)
%mp_getconstraints(lib=work,ds=example,outds=work.constraints)
%mp_assertscope(COMPARE)
%mp_assert(
iftrue=(%mf_nobs(work.constraints)=0),
desc=Empty table created as constraints not supported,
outds=work.test_results
)
desc=Empty TABLE created as constraints not supported,
15
outds=work.test_results
16
)
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : El código utiliza macros (`%mp_assert`, `%mp_getconstraints`, `%mf_nobs`, `%mp_assertscope`) que forman parte del framework SASUnit. El archivo referenciado `macro_without_brief_tag.sas` indica un copyright 'Copyright 2010-2023 HMS Analytical Software GmbH', el editor de SASUnit.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.