@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:
-
Si el procedimiento o la consulta almacenados se han ejecutado correctamente.
-
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:
-
Para varias ejecuciones, utilice el nombre lógico definido por la cláusula
IDde la sentenciaSQLEXEC.IDes necesario para varias ejecuciones de un procedimiento. -
Para una única ejecución, utilice el nombre real del procedimiento almacenado.
<parameter>
Los valores válidos son uno de los siguientes.
-
Nombre del parámetro en el procedimiento o consulta almacenados del que se extraerán los datos y se transferirán al mapa de columnas.
-
RETURN_VALUE, si se extraen valores devueltos por un procedimiento o consulta almacenados.
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);