@GETVAL
Mit der Funktion @GETVAL können Sie Werte aus einer gespeicherten Prozedur oder Abfrage extrahieren, sodass sie als Eingabe für eine FILTER- oder COLMAP-Klausel einer MAP- oder TABLE-Anweisung verwendet werden können.
Ob ein <parameter>-Wert mit @GETVAL extrahiert werden kann, hängt von folgenden Faktoren ab:
-
Gibt an, ob die gespeicherte Prozedur oder Abfrage erfolgreich ausgeführt wurde.
-
Gibt an, ob die gespeicherte Prozedur oder Abfrageergebnisse abgelaufen sind.
Wenn ein Wert nicht extrahiert werden kann, führt die Funktion @GETVAL zu einer Bedingung "Spalte fehlt". Normalerweise geschieht dies bei Aktualisierungsvorgängen, wenn die Datenbank nur Werte für Spalten protokolliert, die geändert wurden.
Normalerweise bedeutet dies, dass die Spalte nicht zugeordnet werden kann. Um auf fehlende Spaltenwerte zu testen, verwenden Sie die Funktion @COLTEST, um das Ergebnis von @GETVAL zu testen, und ordnen Sie dann einen alternativen Wert für die Spalte zu, um fehlende Werte zu kompensieren, falls gewünscht. Um sicherzustellen, dass Spaltenwerte verfügbar sind, können Sie auch die Option FETCHCOLS oder FETCHCOLSEXCEPT des Parameters TABLE oder MAP verwenden, um die Werte aus der Datenbank abzurufen, wenn sie nicht im Log vorhanden sind. Das Aktivieren von zusätzlichem Logging für die erforderlichen Spalten würde ebenfalls funktionieren.
Syntax
@GETVAL (<name>.<parameter>)
<name>
Die <name> der Stored Procedure oder Abfrage. Wenn Sie die Prozedur oder Abfrage mit SQLEXEC ausführen, lauten die gültigen Werte wie folgt:
Verwenden Sie für Abfragen den logischen Namen, der mit der Option ID der Klausel SQLEXEC angegeben wurde. ID ist ein erforderliches Argument SQLEXEC für Abfragen.
Verwenden Sie für gespeicherte Prozeduren eine der folgenden Optionen, je nachdem, wie oft die Prozedur in einer TABLE- oder MAP-Anweisung ausgeführt werden soll:
-
Verwenden Sie bei mehreren Ausführungen den logischen Namen, der durch die
ID-Klausel derSQLEXEC-Anweisung definiert ist.IDist für mehrere Ausführungen einer Prozedur erforderlich. -
Verwenden Sie für eine einzelne Ausführung den Namen der tatsächlich gespeicherten Prozedur.
<parameter>
Gültige Werte sind:
-
Der Name des Parameters in der gespeicherten Prozedur oder Abfrage, aus dem die Daten extrahiert und an die Spaltenzuordnung übergeben werden.
-
RETURN_VALUE, wenn von einer Stored Procedure oder Abfrage zurückgegebene Werte extrahiert werden.
Alternative Syntax
Mit SQLEXEC können Sie Parameterergebnisse erfassen, ohne das Schlüsselwort @GETVAL explizit zu verwenden. Verweisen Sie einfach auf den Prozedurnamen (oder logischen Namen, wenn Sie eine Abfrage oder mehrere Instanzen einer Prozedur verwenden) und Parameter im folgenden Format:
{<procedure_name> | <logical_name>}.<parameter>
Beispiele, Standardsyntax
Beispiel 1
Mit der folgenden Option kann jede Map-Anweisung die Stored Procedure lookup aufrufen, indem sie die logischen Namen lookup1 und lookup2 in der Funktion @GETVAL referenziert und entsprechend auf jede Ergebnismenge verweist.
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));
Beispiel 2
Im Folgenden wird eine einzelne Ausführung der gespeicherten Prozedur lookup gezeigt. In diesem Fall wird der tatsächliche Name der Prozedur verwendet. Ein logischer Name ist nicht erforderlich.
MAP schema.tab1, TARGET schema.tab2,
SQLEXEC (SPNAME lookup, PARAMS (param1 = srccol)),
COLMAP (targcol = @GETVAL (lookup.param1));
Beispiel 3
Im Folgenden wird die Ausführung einer Abfrage gezeigt, aus der Werte mit @GETVAL zugeordnet werden.
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));
Beispiele, alternative Syntax
Beispiel 1
Im folgenden Beispiel wird @GETVAL implizit für die Wortgruppe proc1.p2 ohne das Schlüsselwort @GETVAL aufgerufen.
MAP test.tab1, TARGET test.tab2,
SQLEXEC (SPNAME proc1, ID myproc, PARAMS (p1 = sourcecol1)),
COLMAP (targcol1 = proc1.p2);
Beispiel 2
Im folgenden Beispiel wird die Funktion @GETVAL implizit für die Wortgruppe lookup.desc_param ohne das Schlüsselwort @GETVAL aufgerufen.
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);