SAP HANA Gespeicherte Prozedur Ausgabe-Typen und wie Sie wiederverwenden / capture output in SQLScript
In SAP HANA kann ich eine Prozedur erstellen, die mit in-und output-Parameter. Auch ohne output-parameter der Prozedur können Sie die Ausgabe einer Tabelle.
Merke ich drei Varianten der Ausgabe, die in gespeicherten Prozeduren:
- ein wählen Sie am Ende des Verfahrens - ohne Deklaration der Struktur.
- ein output-parameter
out parameter varhcar(100)
- eine implizite Tabelle definition
returns table (var1 varchar(10))
nach der Funktion parameter-und before-SchlüsselwortLANGUAGE SQLSCRIPT
Was ist der Unterschied von diesen und wie kann ich die Wiederverwendung jedes dieser output-Parameter in anderen gespeicherten Prozeduren?
Die einzige, die ich mir bewusst bin, ist
call procedure(input1, input1, outputVar)
Ich weiß leider nicht, wie gebunden ein SQL-Ergebnis-Ausgabe-Parameter, ohne eine physikalische Tabelle.
Grund für diese Frage
Ausgabe 1
Funktion callBuildJoinOn gibt leeres Ergebnis. Aufgrund, dass die Schleife in SP_BUILD_JOIN_ON wird nicht ausgeführt - aber die Liste ist bauen in split string (beide getestet)
Proceedure callBuildJoinOn
...
in colTable1 nvarchar(200)
out columnsTable1 "SCHEMA"."package::TT.STRING_LIST"
call "SCHEMA"."package::SP_SPLIT_STRING"(colTable1, columnsTable1);
call "SCHEMA"."package::SP_BUILD_JOIN_ON"(:columnsTable1, :columnsTable2, :joinOn);
SP_BUILD_JOIN_ON
columnsTable1 "SCHEMA"."package::TT.STRING_LIST"
declare cursor columnList for
select * from :columnsTable1;
for col as columnList do
joinOn := joinOn || 'a.' || col.item;
end for;
, Warum die Aufteilung in zwei Funktionen?
Deklarieren des cursor Ergebnisse in der compiler-Fehler, wenn nach einem call-Anweisung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es noch eine vierte option, um zu einem Ergebnis einer HANA SQLScript Prozedur: die Ergebnis-Ansicht (nicht mehr unterstützt als von HANA2).
Aber lasst uns nicht rühren, bis noch mehr Verwirrung.
Die verschiedenen Optionen können in verschiedenen Szenarien eingesetzt werden:
Verfahren IN/OUT-Parameter werden verwendet, um die Daten und Ergebnisse aus dem Verfahren. Die OUT-Parameter können entweder an andere SQLScript Variablen (beim Aufruf der Prozedur aus einer anderen Prozedur), oder eine HANA-client-Lesen-Ergebnismengen, erstellt für jeden OUT-parameter vom Typ
TABLE
). Zum Beispiel, ein JDCB-client finden würde, die mehrere Resultsets, die nach der Ausführung der Prozedur und Holen würde denen.Tabelle Funktionen, das sind Funktionen, die eine Tabelle zurückgeben, kann genauso verwendet werden wie Tabellen oder sichten:
Diese bietet eine einfache Möglichkeit zum Lesen zurück, ganze Tabellen von Funktionen oder zur Simulation parametriert Ansichten.
Die Verbleibende option, die Sie erwähnt haben, ist die so genannte "Standard-Ergebnis festlegen". Dies ist wirklich nur nützlich für den Verbrauch in der SQL-editor oder in einem HANA-client holt sich alle Resultsets nach der Prozedur der Ausführung. Das default-ResultSet kann nicht gebunden ist, SQLScript-variable und kann nicht verwiesen werden, in SQL-Befehle.
rst
zu einer output-variable :/REGEXPR
Funktionen zur Verfügung seit geraumer Zeit jetzt, statt. Wenn es um die tatsächlichen Belegung, können Sie öffnen Sie bitte eine neue Frage mit einem reproduzierbaren Beispiel für das problem?Problem war, dass
joinOn
wurde definiert als output-parameter:out joinOn nvarchar(1000)
diese ergab, dass:
joinOn := joinOn || 'a.' || col.item;
führtenull
!Lösung
out
zuinout
joinOn := ''