@GETVAL
Utilisez la fonction @GETVAL pour extraire des valeurs d'une requête ou d'une procédure stockée afin qu'elles puissent être utilisées en entrée dans une clause FILTER ou COLMAP d'une instruction MAP ou TABLE.
La possibilité d'extraire une valeur <parameter> à l'aide de @GETVAL dépend des éléments suivants :
-
Indique si la procédure stockée ou la requête a été exécutée avec succès.
-
Indique si la procédure stockée ou les résultats de la requête ont expiré.
Lorsqu'une valeur ne peut pas être extraite, la fonction @GETVAL entraîne une condition "colonne manquante". En général, cela se produit pour les opérations de mise à jour si la base de données ne consigne que les valeurs des colonnes modifiées.
En général, cela signifie que la colonne ne peut pas être mappée. Pour tester les valeurs de colonne manquantes, utilisez la fonction @COLTEST pour tester le résultat de @GETVAL, puis mettez en correspondance une autre valeur pour la colonne afin de compenser les valeurs manquantes, si nécessaire. Ou, pour vous assurer que les valeurs de colonne sont disponibles, vous pouvez utiliser l'option FETCHCOLS ou FETCHCOLSEXCEPT du paramètre TABLE ou MAP pour extraire les valeurs de la base de données si elles ne sont pas présentes dans le journal. L'activation de la journalisation supplémentaire pour les colonnes nécessaires fonctionnerait également.
Syntaxe
@GETVAL (<name>.<parameter>)
<name>
<name> de la requête ou de la procédure stockée. Lorsque vous utilisez SQLEXEC pour exécuter la procédure ou la requête, les valeurs valides sont les suivantes :
Pour les requêtes, utilisez le nom logique indiqué avec l'option ID de la clause SQLEXEC. ID est un argument SQLEXEC requis pour les requêtes.
Pour les procédures stockées, utilisez l'une des méthodes suivantes, en fonction du nombre d'exécutions de la procédure dans une instruction TABLE ou MAP :
-
Pour les exécutions multiples, utilisez le nom logique défini par la clause
IDde l'instructionSQLEXEC.IDest requis pour les exécutions multiples d'une procédure. -
Pour une exécution unique, utilisez le nom réel de la procédure stockée.
<parameter>
Les valeurs valides sont les suivantes.
-
Nom du paramètre dans la procédure stockée ou la requête à partir de laquelle les données seront extraites et transmises au mapping de colonnes.
-
RETURN_VALUE, si les valeurs renvoyées par une procédure stockée ou une requête sont extraites.
Autre syntaxe
Avec SQLEXEC, vous pouvez capturer les résultats de paramètre sans utiliser explicitement le mot-clé @GETVAL. Il suffit de faire référence au nom de la procédure (ou au nom logique si vous utilisez une requête ou plusieurs instances d'une procédure) et au paramètre au format suivant :
{<procedure_name> | <logical_name>}.<parameter>
Exemples, syntaxe standard
Exemple 1
Les éléments suivants permettent à chaque instruction de mapping d'appeler la procédure stockée lookup en référençant les noms logiques lookup1 et lookup2 au sein de la fonction @GETVAL et en faisant référence de manière appropriée à chaque ensemble de résultats.
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));
Exemple 2
L'exemple suivant présente une exécution unique de la procédure stockée lookup. Dans ce cas, le nom réel de la procédure est utilisé. Un nom logique n'est pas nécessaire.
MAP schema.tab1, TARGET schema.tab2,
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)),
COLMAP (targcol = @GETVAL (lookup.param1));
Exemple 3
L'exemple suivant illustre l'exécution d'une requête à partir de laquelle les valeurs sont mises en correspondance avec @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));
Exemples, syntaxe alternative
Exemple 1
Dans l'exemple suivant, @GETVAL est appelé implicitement pour l'expression proc1.p2 sans le mot-clé @GETVAL.
MAP test.tab1, TARGET test.tab2,
SQLEXEC (SPNAME proc1, ID myproc, PARAMS (p1 = sourcecol1)),
COLMAP (targcol1 = proc1.p2);
Exemple 2
Dans l'exemple suivant, la fonction @GETVAL est appelée implicitement pour l'expression lookup.desc_param sans le mot-clé @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);