Cómo añadir restricciones de DBA a la condición de Join: SET DBAJOIN

Cómo:

Cuando se aplican restricciones de DBA a una solicitud, en una estructura multisegmento, éstas se añaden por defecto como condiciones WHERE en la solicitud de informe. Cuando el parámetro DBAJOIN se encuentra activado, las restricciones de DBA se tratan como si fueran internas respecto al archivo o segmento para el que han sido especificadas, y se incluyen en la sintaxis del join.

Esta diferencia es importante cuando el archivo o segmento que está siendo restringido tiene un elemento principal en la estructura y el join es externo o único.

Cuando las restricciones se tratan como si fueran filtros de informe, se omitirán de la salida del informe los segmentos de nivel inferior que no las satisfagan, junto con sus segmentos host. Como se han omitido los segmentos host, la salida no refleja un verdadero join externo o único.

Cuando las restricciones se tratan como si fueran condiciones de join, los segmentos de nivel inferior que no las satisfagan aparecerán como valores no disponibles, y la salida del informe mostrará todas las filas host.


Principio de página

x
Sintaxis: Cómo Añadir restricciones de DBA a la condición de Join
SET DBAJOIN = {OFF|ON}

donde:

OFF

Trata las restricciones de la DBA como filtros WHERE, en la solicitud de informe. OFF es el valor predeterminado.

ON

Trata las restricciones de la DBA como condiciones de join.



Ejemplo: Cómo usar la propiedad DBAJOIN con tablas relacionales

La siguiente solicitud crea dos tablas: EMPINFOSQL y EDINFOSQL:

TABLE FILE EMPLOYEE
SUM LAST_NAME FIRST_NAME CURR_JOBCODE
BY EMP_ID
ON TABLE HOLD AS EMPINFOSQL FORMAT SQLMSS
END
-RUN
TABLE FILE EDUCFILE
SUM COURSE_CODE COURSE_NAME
BY EMP_ID
ON TABLE HOLD AS EDINFOSQL FORMAT SQLMSS
END

Añada los siguientes atributos de DBA al final del archivo máster EMPINFOSQL generado. Con las restricciones listadas, USER2 no puede recuperar los códigos de curso de 300 o superior:

END
DBA=USER1,$
USER=USER2, ACCESS = R, $
FILENAME=EDINFOSQL,$
USER=USER2, ACCESS = R, RESTRICT = VALUE, NAME=SYSTEM, VALUE=COURSE_CODE LT 300;,$

Añada los siguientes atributos de DBA al final del archivo máster EDINFOSQL generado:

END
DBA=USER1,DBAFILE=EMPINFOSQL,$

Emita la siguiente solicitud:

SET USER=USER2
SET DBAJOIN=OFF
JOIN LEFT_OUTER EMP_ID IN EMPINFOSQL TO MULTIPLE EMP_ID IN EDINFOSQL AS J1
TABLE FILE EMPINFOSQL
PRINT LAST_NAME FIRST_NAME COURSE_CODE COURSE_NAME
ON TABLE SET PAGE NOPAGE
ON TABLE SET STYLE *
GRID=OFF,$
END

Como indica la siguiente imagen, se han omitido todas las filas host (principales) y secundarias con un código de curso de 300, o superior, de la salida del informe:

El SQL que se ha generado indica que la restricción de DBA ha sido añadida al predicado WHERE de la declaración SELECT:

SELECT 
  T1."EID",
  T1."LN",
  T1."FN",
  T2."CC",
  T2."CD"
   FROM 
  EMPINFOSQL T1,
  EDINFOSQL T2
   WHERE 
  (T2."EID" = T1."EID") AND 
  (T2."CC" < '300;');

Vuelva a ejecutar la solicitud con SET DBAJOIN=ON. Ahora, la salida muestra todas las filas host, con valores no disponibles en lugar de los segmentos de nivel inferior que no satisfacían la restricción de DBA, como indica la siguiente imagen:

El SQL que se ha generado indica que la restricción de DBA ha sido añadida al join y que no hay predicado WHERE:

SELECT 
  T1."EID",
  T1."LN",
  T1."FN",
  T2."EID",
  T2."CC",
  T2."CD"
   FROM 
  ( EMPINFOSQL T1
   LEFT OUTER JOIN EDINFOSQL T2
   ON T2."EID" = T1."EID" AND 
      (T2."CC" < '300;') );

WebFOCUS