@GETVAL
Utilizzare la funzione @GETVAL per estrarre i valori da una stored procedure o query in modo che possano essere utilizzati come input per una clausola FILTER o COLMAP di un'istruzione MAP o TABLE.
L'estrazione di un valore <parameter> con @GETVAL dipende dai seguenti elementi:
-
Indica se la stored procedure o query è stata eseguita correttamente.
-
Indica se la procedura memorizzata o i risultati della query sono scaduti.
Quando non è possibile estrarre un valore, la funzione @GETVAL genera una condizione "colonna mancante". In genere, ciò si verifica per le operazioni di aggiornamento se il database registra solo i valori per le colonne modificate.
Di solito ciò significa che la colonna non può essere mappata. Per eseguire il test dei valori di colonna mancanti, utilizzare la funzione @COLTEST per eseguire il test del risultato di @GETVAL, quindi mappare un valore alternativo per la colonna per compensare i valori mancanti, se necessario. In alternativa, per assicurarsi che i valori di colonna siano disponibili, è possibile utilizzare l'opzione FETCHCOLS o FETCHCOLSEXCEPT del parametro TABLE o MAP per recuperare i valori dal database se non sono presenti nel log. Funzionerebbe anche l'abilitazione della registrazione supplementare per le colonne necessarie.
Sintassi
@GETVAL (<name>.<parameter>)
<name>
Il valore <name> della stored procedure o query. Quando si utilizza SQLEXEC per eseguire la procedura o la query, i valori validi sono i seguenti:
Per le query, utilizzare il nome logico specificato con l'opzione ID della clausola SQLEXEC. ID è un argomento SQLEXEC obbligatorio per le query.
Per le stored procedure, utilizzare una delle seguenti opzioni, a seconda del numero di volte in cui la procedura deve essere eseguita all'interno di un'istruzione TABLE o MAP:
-
Per più esecuzioni, utilizzare il nome logico definito dalla clausola
IDdell'istruzioneSQLEXEC.IDè richiesto per più esecuzioni di una procedura. -
Per una singola esecuzione, utilizzare il nome della stored procedure effettiva.
<parameter>
I valori validi sono uno dei seguenti.
-
Il nome del parametro nella stored procedure o query da cui verranno estratti i dati e passati alla mappa delle colonne.
-
RETURN_VALUE, se vengono estratti i valori restituiti da una stored procedure o query.
Sintassi alternativa
Con SQLEXEC è possibile acquisire i risultati dei parametri senza utilizzare in modo esplicito la parola chiave @GETVAL. È sufficiente fare riferimento al nome della procedura (o al nome logico se si utilizza una query o più istanze di una procedura) e al parametro nel seguente formato:
{<procedure_name> | <logical_name>}.<parameter>
Esempi, Sintassi standard
Esempio 1
Quanto segue consente a ciascuna istruzione map di chiamare la stored procedure lookup facendo riferimento ai nomi logici lookup1 e lookup2 all'interno della funzione @GETVAL e facendo riferimento in modo appropriato a ogni set di risultati.
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));
Esempio 2
Di seguito è illustrata una singola esecuzione della stored procedure lookup. In questo caso, viene utilizzato il nome effettivo della procedura. Non è necessario un nome logico.
MAP schema.tab1, TARGET schema.tab2,
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)),
COLMAP (targcol = @GETVAL (lookup.param1));
Esempio 3
Di seguito viene illustrata l'esecuzione di una query da cui vengono mappati i valori 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));
Esempi, sintassi alternativa
Esempio 1
Nell'esempio seguente, @GETVAL viene chiamato implicitamente per la frase proc1.p2 senza la parola chiave @GETVAL.
MAP test.tab1, TARGET test.tab2,
SQLEXEC (SPNAME proc1, ID myproc, PARAMS (p1 = sourcecol1)),
COLMAP (targcol1 = proc1.p2);
Esempio 2
Nell'esempio seguente, la funzione @GETVAL viene chiamata implicitamente per la frase lookup.desc_param senza la parola chiave @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);