@GETVAL
Use a função @GETVAL para extrair valores de um procedimento ou consulta armazenado para que eles possam ser usados como entrada em uma cláusula FILTER ou COLMAP de uma instrução MAP ou TABLE.
A possibilidade de um valor <parameter> ser extraído ou não com @GETVAL depende do seguinte:
-
Se o procedimento ou consulta armazenado foi ou não executado com sucesso.
-
Se o procedimento armazenado ou os resultados da consulta expiraram.
Quando um valor não pode ser extraído, a função @GETVAL resulta em uma condição "coluna ausente". Normalmente, isso ocorre para operações de atualização se o banco de dados registrar apenas valores para colunas que foram alteradas.
Em geral, isso significa que a coluna não pode ser mapeada. Para testar se há valores de coluna ausentes, use a função @COLTEST para testar o resultado de @GETVAL e, em seguida, mapeie um valor alternativo para a coluna para compensar valores ausentes, se desejado. Ou, para garantir que os valores da coluna estejam disponíveis, você pode usar a opção FETCHCOLS ou FETCHCOLSEXCEPT do parâmetro TABLE ou MAP para extrair os valores do banco de dados se eles não estiverem presentes no log. A ativação do registro em log complementar para as colunas necessárias também funcionaria.
Sintaxe
@GETVAL (<name>.<parameter>)
<name>
O <name> do procedimento ou consulta armazenado. Ao usar SQLEXEC para executar o procedimento ou a consulta, os valores válidos são os seguintes:
Para consultas, use o nome lógico especificado com a opção ID da cláusula SQLEXEC. ID é um argumento SQLEXEC obrigatório para consultas.
Para procedimentos armazenados, use uma das seguintes opções, dependendo de quantas vezes o procedimento deve ser executado em uma instrução TABLE ou MAP:
-
Para várias execuções, use o nome lógico definido pela cláusula
IDda instruçãoSQLEXEC.IDé necessário para várias execuções de um procedimento. -
Para uma única execução, use o nome real do procedimento armazenado.
<parameter>
Os valores válidos são um dos seguintes.
-
O nome do parâmetro no procedimento armazenado ou na consulta da qual os dados serão extraídos e passados para o mapa de colunas.
-
RETURN_VALUE, se estiver extraindo valores retornados por um procedimento ou consulta armazenada.
Sintaxe Alternativa
Com SQLEXEC, você pode capturar resultados de parâmetro sem usar explicitamente a palavra-chave @GETVAL. Basta consultar o nome do procedimento (ou o nome lógico se estiver usando uma consulta ou várias instâncias de um procedimento) e o parâmetro no seguinte formato:
{<procedure_name> | <logical_name>}.<parameter>
Exemplos, Sintaxe Padrão
Exemplo 1
A seguir, é possível que cada instrução de mapa chame o procedimento armazenado lookup fazendo referência aos nomes lógicos lookup1 e lookup2 na função @GETVAL e faça referência adequada a cada conjunto 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));
Exemplo 2
O seguinte mostra uma única execução do procedimento armazenado lookup. Neste caso, o nome real do procedimento é usado. Não é necessário um nome lógico.
MAP schema.tab1, TARGET schema.tab2,
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)),
COLMAP (targcol = @GETVAL (lookup.param1));
Exemplo 3
Veja a seguir a execução de uma consulta a partir da qual os valores são mapeados com @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));
Exemplos, Sintaxe Alternativa
Exemplo 1
No exemplo a seguir, @GETVAL é chamado implicitamente para a frase proc1.p2 sem a palavra-chave @GETVAL.
MAP test.tab1, TARGET test.tab2,
SQLEXEC (SPNAME proc1, ID myproc, PARAMS (p1 = sourcecol1)),
COLMAP (targcol1 = proc1.p2);
Exemplo 2
No exemplo a seguir, a função @GETVAL é chamada implicitamente para a frase lookup.desc_param sem a palavra-chave @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);