Salida de usuario — %USER
Utilice esta función para llamar a un programa de salida de usuario desde una expresión. Esta función proporciona flexibilidad cuando se requiere lógica compleja que no se puede expresar mediante las funciones de columna proporcionadas. Puede utilizar esta función para llamar a un programa de salida de usuario con parámetros de entrada.
Nota: motor de réplica de CDC para Microsoft SQL Server no da soporte a esta función. Si utiliza un motor de réplica que no sea motor de réplica de CDC para DB2 para z/OS,
no puede utilizar esta función para llamar a un procedimiento almacenado.
Sintaxis
%USER('nombre_programa', parm1, parm2, ..., parmn
Parámetros
- nombre_programa
- Especifica el nombre del programa de salida de usuario. Debe colocar los valores de este parámetro entre comillas. Puede escribir el programa de salida de usuario en lenguaje de alto nivel. Debe colocar un objeto ejecutable para el programa de salida de usuario en el directorio de instalación de réplica de CDC antes de iniciar la renovación o duplicación.
- parm1, parm2, ..., parmn
- Especifique las columnas o los literales que se pasarán como parámetros al programa de salida de usuario (20 como máximo).
- En el programa de salida de usuario que escribe, debe declarar una estructura de datos que defina campos específicos del resultado y cada parámetro de entrada (parm1, parm2, ..., parmn).
Campo Tipo de datos y longitud Descripción DATATYPE Binario de dos bytes Especifica el tipo de datos del resultado o parámetro de entrada: - 1—Caracteres
- 2—Fecha
- 3—Flotante
- 4—Entero
- 5—Numérico empaquetado
- 6—Hora
- 7—Numérico con zona
LENGTH Entero de dos bytes Especifica la longitud del resultado o parámetro de entrada, en bytes. DIGITS Binario de dos bytes Especifica el número de dígitos en el resultado o parámetro de entrada. DECPLC Binario de dos bytes Especifica el número de posiciones decimales en el resultado o parámetro de entrada. NULLIND Binario de dos bytes Especifica si el resultado o parámetro de entrada es NULL: - 0: el resultado o parámetro de entrada no es NULL.
- 1: el resultado o parámetro de entrada es NULL.
DTMFMT Carácter de cuatro bytes Especifica el formato de fecha del resultado o parámetro de entrada: - *USA
- Formato de fecha de Estados Unidos.
- *ISO
- Formato de fecha ISO (International Organization for Standardization).
- *EUR
- Formato de fecha europeo.
- *JIS
- Japanese Industrial Standard.
- *AMD
- El formato de fecha es aammdd.
- *MDA
- El formato de fecha es mmddaa.
- *DMA
- El formato de fecha es ddmmaa.
VALUE Especifica una de las opciones siguientes: - Para cada parámetro de entrada, el campo que contiene el valor del parámetro de entrada pasado al programa de salida de usuario.
- Para cada resultado de programa de salida de usuario, el campo que contiene el resultado devuelto por el programa de salida de usuario.
El nombre de este campo en el programa de salida de usuario lo define el usuario.
Tipo de datos del resultado
El tipo de datos del resultado devuelto por el programa de salida de usuario.
Ejemplos
%USER(‘USERSEL1', BRANCH)Esta función llama al programa COBOL USERSEL1,
que pasa la columna BRANCH como parámetro. USERSEL1 comprueba si BRANCH
está establecido o no en '11'. Si es así, el programa de salida de usuario devuelve un valor de caracteres de un byte de Y. De lo contrario, devuelve un valor de caracteres de N.
Nota: Se proporciona el siguiente programa de salida de usuario sólo para fines de ilustración y se debe probar para todos los entornos de producción.
IDENTIFICATION DIVISION.
PROGRAM-ID. USERSEL1.
AUTHOR. IBM CORP.
INSTALLATION. IBM CORP.
DATE-COMPILED.
*******************************************************************
* Program : USERSEL1.
* ----------------
* Version: 1.0
* ----------------
* Description: SAMPLE COBOL USER ENTRY POINT PROGRAM
* ----------------
*
******************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-AS400.
OBJECT-COMPUTER. IBM-AS400.
******************************************************************
* D A T A D I V I S I O N
******************************************************************
DATA DIVISION.
******************************************************************
* W O R K I N G S T O R A G E S E C T I O N
******************************************************************
WORKING-STORAGE SECTION.
*
01 DATATYPES COMP-4.
03 TYP-CHAR PIC S9(4) VALUE 1.
03 TYP-DATE PIC S9(4) VALUE 2.
03 TYP-FLOAT PIC S9(4) VALUE 3.
03 TYP-INTEGER PIC S9(4) VALUE 4.
03 TYP-PACKED PIC S9(4) VALUE 5.
03 TYP-TIME PIC S9(4) VALUE 6.
03 TYP-ZONED PIC S9(4) VALUE 7.
******************************************************************
* L I N K A G E S E C T I O N
******************************************************************
LINKAGE SECTION.
01 RETURN-VALUE.
03 RV-DATATYPE PIC S9(4) COMP-4.
03 RV-LENGTH PIC S9(4) COMP-4.
03 RV-DIGITS PIC S9(4) COMP-4.
03 RV-DECPLC PIC S9(4) COMP-4.
03 RV-NULLIND PIC S9(4) COMP-4.
03 RV-DTMFMT PIC X(4).
03 RV-SELECT PIC X(1).
01 PARM-1.
03 P1-DATATYPE PIC S9(4) COMP-4.
03 P1-LENGTH PIC S9(4) COMP-4.
03 P1-DIGITS PIC S9(4) COMP-4.
03 P1-DECPLC PIC S9(4) COMP-4.
03 P1-NULLIND PIC S9(4) COMP-4.
03 P1-DTMFMT PIC X(4).
03 P1-BRANCH PIC X(2).
******************************************************************
* P R O C E D U R E D I V I S I O N
******************************************************************
PROCEDURE DIVISION USING RETURN-VALUE
PARM-1.
ML-0010.
*
* Este programa de ejemplo comprueba si parm 1 tiene un valor ‘11' y, si lo encuentra,
* devuelve ‘Y'; de lo contrario, devuelve ‘N'.
*
* Definir el valor devuelto como un campo de caracteres de 1 byte.
*
MOVE TYP-CHAR TO RV-DATATYPE.
MOVE 1 TO RV-LENGTH.
MOVE ZERO TO RV-DIGITS.
MOVE ZERO TO RV-DECPLC.
MOVE ZERO TO RV-NULLIND.
MOVE SPACES TO RV-DTMFMT.
*
* Probar un valor de ‘11' en el primer parámetro.
*
IF P1-BRANCH IS EQUAL TO ‘11'
MOVE ‘Y' TO RV-SELECT
ELSE
MOVE ‘N' TO RV-SELECT.
EXIT PROGRAM.