@GETVAL

Utilice la función @GETVAL para extraer valores de un procedimiento o consulta almacenados para que se puedan utilizar como entrada en una cláusula FILTER o COLMAP de una sentencia MAP o TABLE.

Si se puede extraer o no un valor <parameter> con @GETVAL depende de lo siguiente:

  1. Si el procedimiento o la consulta almacenados se han ejecutado correctamente.

  2. Si el procedimiento almacenado o los resultados de la consulta han caducado.

Cuando no se puede extraer un valor, la función @GETVAL da como resultado una condición de "falta columna". Normalmente, esto ocurre para las operaciones de actualización si la base de datos solo registra valores para las columnas que se han cambiado.

Normalmente, esto significa que la columna no se puede asignar. Para probar los valores de columna que faltan, utilice la función @COLTEST para probar el resultado de @GETVAL y, a continuación, asigne un valor alternativo para la columna para compensar los valores que faltan, si lo desea. O bien, para asegurarse de que los valores de columna están disponibles, puede utilizar la opción FETCHCOLS o FETCHCOLSEXCEPT del parámetro TABLE o MAP para recuperar los valores de la base de datos si no están presentes en el log. La activación del registro complementario para las columnas necesarias también funcionaría.

Sintaxis

@GETVAL (<name>.<parameter>)

<name>

El <name> del procedimiento o consulta almacenados. Al utilizar SQLEXEC para ejecutar el procedimiento o la consulta, los valores válidos son los siguientes:

Para las consultas, utilice el nombre lógico especificado con la opción ID de la cláusula SQLEXEC. ID es un argumento SQLEXEC necesario para las consultas.

Para los procedimientos almacenados, utilice una de las siguientes opciones, según el número de veces que se ejecute el procedimiento en una sentencia TABLE o MAP:

<parameter>

Los valores válidos son uno de los siguientes.

Sintaxis alternativa

Con SQLEXEC, puede capturar resultados de parámetros sin utilizar explícitamente la palabra clave @GETVAL. Simplemente consulte el nombre del procedimiento (o el nombre lógico si utiliza una consulta o varias instancias de un procedimiento) y el parámetro en el siguiente formato:

{<procedure_name> | <logical_name>}.<parameter>

Ejemplos, sintaxis estándar

Ejemplo 1

Lo siguiente permite que cada sentencia de asignación llame al procedimiento almacenado lookup haciendo referencia a los nombres lógicos lookup1 y lookup2 dentro de la función @GETVAL y haga referencia adecuada a cada juego de resultados.

MAP schema.srctab, TARGET schema.targtab,
SQLEXEC (SPNAME lookup, ID lookup1, PARAMS (param1 = srccol)),
COLMAP (targcol1 = @GETVAL (lookup1.param2));
MAP schema.srctab, TARGET schema.targtab2,
SQLEXEC (SPNAME lookup, ID lookup2, PARAMS (param1 = srccol)),
COLMAP (targcol2= @GETVAL (lookup2.param2));

Ejemplo 2

A continuación, se muestra una única ejecución del procedimiento almacenado lookup. En este caso, se utiliza el nombre real del procedimiento. No es necesario un nombre lógico.

MAP schema.tab1, TARGET schema.tab2,
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)),
COLMAP (targcol = @GETVAL (lookup.param1));

Ejemplo 3

A continuación se muestra la ejecución de una consulta a partir de la cual se asignan valores con @GETVAL.

MAP sales.account, TARGET sales.newacct,
SQLEXEC (ID lookup,
QUERY ' select desc_col into desc_param from lookup_table '
' where code_col = :code_param ',
PARAMS (code_param = account_code)),
COLMAP (newacct_id = account_id, newacct_val = @GETVAL (lookup.desc_param));

Ejemplos, sintaxis alternativa

Ejemplo 1

En el siguiente ejemplo, se llama implícitamente a @GETVAL para la frase proc1.p2 sin la palabra clave @GETVAL.

MAP test.tab1, TARGET test.tab2,
SQLEXEC (SPNAME proc1, ID myproc, PARAMS (p1 = sourcecol1)),
COLMAP (targcol1 = proc1.p2);

Ejemplo 2

En el siguiente ejemplo, la función @GETVAL se llama implícitamente para la frase lookup.desc_param sin la palabra clave @GETVAL.

MAP sales.account, TARGET sales.newacct,
SQLEXEC (ID lookup,
QUERY ' select desc_col into desc_param from lookup_table '
' where code_col = :code_param ',
PARAMS (code_param = account_code)),
COLMAP (newacct_id = account_id, newacct_val = lookup.desc_param);