CALL (mit anonymen Prozeduren)¶
Ermöglicht das Erstellen und Aufrufen einer anonymen Prozedur, die wie eine gespeicherte Prozedur ist, aber nicht zur späteren Verwendung gespeichert wird.
Mit diesem Befehl erstellen Sie eine anonyme Prozedur, die durch Parameter in der WITH-Klausel definiert ist, und rufen diese Prozedur auf.
Für diesen Befehl benötigen Sie keine Rolle mit CREATE PROCEDURE-Schemaberechtigungen.
Die Prozedur wird mit Aufruferrechten ausgeführt, was bedeutet, dass die Prozedur mit den Berechtigungen des Aufrufers ausgeführt wird, dass sie den aktuellen Sitzungskontext verwendet und Zugriff auf die Sitzungsvariablen und Parameter des Aufrufers hat.
- Siehe auch:
Syntax¶
Java und Scala¶
WITH <name> AS PROCEDURE ([ <arg_name> <arg_data_type> ]) [ , ... ] )
RETURNS { <result_data_type> [ [ NOT ] NULL ] | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
LANGUAGE { SCALA | JAVA }
RUNTIME_VERSION = '<scala_or_java_runtime_version>'
PACKAGES = ( 'com.snowflake:snowpark:<version>' [, '<package_name_and_version>' ...] )
[ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
HANDLER = '<fully_qualified_method_name>'
[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
[ AS '<procedure_definition>' ]
[ , <cte_nameN> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
CALL <name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
Bei Java- und Scala-Prozeduren mit Staging-Handlern verwenden Sie die folgende Syntax:
WITH <name> AS PROCEDURE ([ <arg_name> <arg_data_type> ]) [ , ... ] )
RETURNS { <result_data_type> [ [ NOT ] NULL ] | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
LANGUAGE { SCALA | JAVA }
RUNTIME_VERSION = '<scala_or_java_runtime_version>'
PACKAGES = ( 'com.snowflake:snowpark:<version>' [, '<package_name_and_version>' ...] )
[ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
HANDLER = '<fully_qualified_method_name>'
[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
[ , <cte_nameN> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
CALL <name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
JavaScript¶
WITH <name> AS PROCEDURE ([ <arg_name> <arg_data_type> ]) [ , ... ] )
RETURNS <result_data_type> [ [ NOT ] NULL ]
LANGUAGE JAVASCRIPT
[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
AS '<procedure_definition>'
[ , <cte_nameN> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
CALL <name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
Python¶
Für Inline-Prozeduren verwenden Sie die folgende Syntax:
WITH <name> AS PROCEDURE ( [ <arg_name> <arg_data_type> ] [ , ... ] )
RETURNS { <result_data_type> [ [ NOT ] NULL ] | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
LANGUAGE PYTHON
RUNTIME_VERSION = '<python_version>'
PACKAGES = ( 'snowflake-snowpark-python[==<version>]'[, '<package_name>[==<version>]' ... ])
[ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
HANDLER = '<function_name>'
[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
[ , <cte_nameN> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
AS '<procedure_definition>'
CALL <name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
Für eine Prozedur, bei der sich der Code in einer Datei in einem Stagingbereich befindet, verwenden Sie die folgende Syntax:
WITH <name> AS PROCEDURE ( [ <arg_name> <arg_data_type> ] [ , ... ] )
RETURNS { <result_data_type> [ [ NOT ] NULL ] | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
LANGUAGE PYTHON
RUNTIME_VERSION = '<python_version>'
PACKAGES = ( 'snowflake-snowpark-python[==<version>]'[, '<package_name>[==<version>]' ... ])
[ IMPORTS = ( '<stage_path_and_file_name_to_read>' [, '<stage_path_and_file_name_to_read>' ...] ) ]
HANDLER = '<module_file_name>.<function_name>'
[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
[ , <cte_nameN> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
CALL <name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
Snowflake Scripting¶
WITH <name> AS PROCEDURE ([ <arg_name> <arg_data_type> ]) [ , ... ] )
RETURNS { <result_data_type> | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
LANGUAGE SQL
[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
AS '<procedure_definition>'
[ , <cte_nameN> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
CALL <name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
Erforderliche Parameter¶
Alle Sprachen¶
WITH name AS PROCEDURE ( [ arg_name arg_data_type ] [ , ... ] )
Gibt den Bezeichner (
name
) und alle Eingabeargumente für die Prozedur an.Für den Bezeichner:
Der Bezeichner muss mit einem alphabetischen Zeichen beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. „Mein Objekt“). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten. Siehe Anforderungen an Bezeichner.
Für die Eingabeargumente:
Für
arg_name
(Name des Arguments) geben Sie den Namen des Eingabearguments an.Für
arg_data_type
(Datentyp des Arguments) ist der Snowflake-Datentyp zu verwenden, der der von Ihnen verwendeten Handler-Sprache entspricht.Für Java-Prozeduren siehe Zuordnung von Datentypen zwischen SQL und Java.
Für JavaScript-Prozeduren siehe Zuordnen von SQL- und JavaScript-Datentypen.
Für Python-Prozeduren siehe Zuordnung von Datentypen zwischen SQL und Python.
Für Scala-Prozeduren siehe Zuordnung von Datentypen zwischen SQL und Scala.
Für Snowflake Scripting ein SQL-Datentyp.
Bemerkung
Bei Prozeduren, die Sie in Java, Python oder Scala (unter Verwendung der Snowpark-APIs) schreiben, lassen Sie das Argument für das Snowpark-
Session
-Objekt weg.Das Argument
Session
ist kein formaler Parameter, den Sie angeben. Wenn Sie diesen Befehl ausführen, erstellt Snowflake automatisch einSession
-Objekt und übergibt es an die Handler-Funktion für Ihre Prozedur.
RETURNS result_data_type [ [ NOT ] NULL ]
Gibt den von der Prozedur zurückgegebenen Ergebnistyp an.
Verwenden Sie NOT NULL, um anzugeben, dass die Prozedur nur Nicht-Null-Werte zurückgeben darf. Der Standardwert ist NULL, was bedeutet, dass die Prozedur NULL zurückgeben kann.
Verwenden Sie für
result_data_type
(Ergebnisdatentyp) den Snowflake-Datentyp, der dem Typ der von Ihnen verwendeten Sprache entspricht.Für Java-Prozeduren siehe Zuordnung von Datentypen zwischen SQL und Java.
Für JavaScript-Prozeduren siehe Zuordnen von SQL- und JavaScript-Datentypen.
Für Python-Prozeduren siehe Zuordnung von Datentypen zwischen SQL und Python.
Für Scala-Prozeduren siehe Zuordnung von Datentypen zwischen SQL und Scala.
Für Snowflake Scripting ein SQL-Datentyp.
Bemerkung
Prozeduren, die Sie in Java oder Scala schreiben, müssen einen Rückgabewert haben. Wenn in Python eine Prozedur keinen Wert zurückgibt, wird dies als Rückgabe von
None
verarbeitet.Beachten Sie, dass die WITH-Anweisung dieses Befehls unabhängig von der Handler-Sprache eine RETURNS-Klausel enthalten muss, die einen Rückgabetyp definiert, auch wenn die Prozedur nicht explizit etwas zurückgibt.
Wenn Sie die Snowflake-Datentypen der Spalten in der zurückgegebenen Tabelle kennen, geben Sie in
RETURNS TABLE ( [ col_name col_data_type [ , ... ] ] )
die Spaltennamen („col_name“) und Spaltendatentypen („col_data_type“) an.WITH get_top_sales() AS PROCEDURE RETURNS TABLE (sales_date DATE, quantity NUMBER) ... CALL get_top_sales();
Andernfalls (z. B. wenn Sie die Spaltentypen während der Laufzeit bestimmen) können Sie die Spaltennamen und -typen weglassen:
WITH get_top_sales() AS PROCEDURE ... RETURNS TABLE () CALL get_top_sales();
Bemerkung
Derzeit können Sie in der
RETURNS TABLE(...)
-Klausel den Datentyp GEOGRAPHY nicht als Spaltentyp angeben. Dies gilt unabhängig davon, ob Sie eine gespeicherte oder eine anonyme Prozedur erstellen.CREATE OR REPLACE PROCEDURE test_return_geography_table_1() RETURNS TABLE(g GEOGRAPHY) ...
WITH test_return_geography_table_1() AS PROCEDURE RETURNS TABLE(g GEOGRAPHY) ... CALL test_return_geography_table_1();
Wenn Sie versuchen, GEOGRAPHY als Spaltentyp anzugeben, führt der Aufruf der gespeicherten Prozedur zu einem Fehler:
Stored procedure execution error: data type of returned table does not match expected returned table type
Um dieses Problem zu umgehen, können Sie die Spaltenargumente und -typen in
RETURNS TABLE()
weglassen.CREATE OR REPLACE PROCEDURE test_return_geography_table_1() RETURNS TABLE() ...
WITH test_return_geography_table_1() AS PROCEDURE RETURNS TABLE() ... CALL test_return_geography_table_1();
RETURNS TABLE(...)
wird nur unterstützt, wenn der Handler in den folgenden Sprachen geschrieben ist:
In der Praxis kann der zurückgegebene Wert nicht außerhalb eines Snowflake Scripting-Blocks verwendet werden, da der Aufruf nicht Teil eines Ausdrucks sein kann.
LANGUAGE language
Gibt die Sprache des Handler-Codes der Prozedur an.
Derzeit werden folgende Werte für
language
(Sprache) unterstützt:JAVA
(für Java)JAVASCRIPT
(für JavaScript)PYTHON
(für Python)SCALA
(für Scala)SQL
(für Snowflake Scripting)
AS procedure_definition
Definiert den Code, der von der Prozedur ausgeführt wird. Die Definition kann aus jedem gültigen Code bestehen.
Beachten Sie Folgendes:
Bei Prozeduren, für die der Code nicht inline ist, lassen Sie die AS-Klausel weg. Dazu gehören Prozeduren, deren Handler sich in einem Stagingbereich befinden.
Verwenden Sie stattdessen die IMPORTS-Klausel, um den Speicherort der Datei anzugeben, die den Code für die Prozedur enthält. Weitere Details dazu finden Sie unter:
In folgenden Fällen müssen Sie
procedure definition
auch in Snowflake Scripting mit Trennzeichen für Zeichenfolgenliterale ('
oder$$
) umschließen:Wenn Sie Prozeduren in JavaScript schreiben und eine Zeichenfolge Zeilenumbrüche enthält, können Sie die Zeichenfolge mit Backquotes (auch „Backticks“ genannt) umschließen.
Im folgenden Beispiel einer JavaScript-Prozedur werden
$$
und Backquotes verwendet, da der Text der Prozedur einfache und doppelte Anführungszeichen enthält:WITH proc3 AS PROCEDURE () RETURNS VARCHAR LANGUAGE javascript AS $$ var rs = snowflake.execute( { sqlText: `INSERT INTO table1 ("column 1") SELECT 'value 1' AS "column 1" ;` } ); return 'Done.'; $$ CALL proc3();
Snowflake validiert den Handler-Code nicht. Ungültiger Handler-Code führt jedoch bei Ausführung des Befehls zu Fehlern.
Weitere Informationen zu gespeicherten Prozeduren finden Sie unter Verwenden von gespeicherten Prozeduren.
CALL name ( [ [ arg_name => ] arg , ... ] )
Gibt den Bezeichner (
name
) für die aufzurufende Prozedur sowie alle Eingabeargumente an.Sie können die Eingabeargumente entweder über den Namen (
arg_name => arg
) oder über die Position (arg
) angeben.Beachten Sie Folgendes:
Sie müssen alle Argumente entweder über den Namen oder über die Position angeben. Sie können nicht einige der Argumente über den Namen und andere Argumente über die Position angeben.
Wenn Sie ein Argument über den Namen angeben, können Sie den Argumentnamen nicht in doppelten Anführungszeichen einschließen.
Wenn zwei Funktionen oder zwei Prozeduren den gleichen Namen, aber unterschiedliche Argumenttypen haben, können Sie die Argumentnamen verwenden, um anzugeben, welche Funktion bzw. Prozedur ausgeführt werden soll, allerdings müssen die Argumentnamen unterschiedlich sein. Weitere Informationen dazu finden Sie unter Überladen von Prozeduren und Funktionen.
Java, Python oder Scala¶
RUNTIME_VERSION = 'language_runtime_version'
Die zu verwendende Laufzeitversion der Programmiersprache. Folgende Versionen werden derzeit unterstützt:
Java: 11
Python:
3.8
3.9
3.10
3.11
Scala: 2.12
PACKAGES = ( 'snowpark_package_name' [, 'package_name' ...] )
Eine durch Komma getrennte Liste mit den Namen der in Snowflake bereitgestellten Pakete, die in die Ausführungsumgebung des Handler-Codes aufgenommen werden sollen. Das Snowpark-Paket ist für Prozeduren erforderlich und muss daher immer in der PACKAGES-Klausel referenziert werden. Weitere Informationen zu Snowpark finden Sie unter Snowpark-API.
Standardmäßig enthält die Umgebung, in der Snowflake Prozeduren ausführt, einen ausgewählten Satz von Paketen für unterstützte Sprachen. Wenn Sie in der PACKAGES-Klausel auf diese Pakete verweisen, ist es nicht erforderlich, in der IMPORTS-Klausel auf eine Datei zu verweisen, die das Paket enthält, da das Paket bereits in Snowflake verfügbar ist.
Eine Liste der unterstützten Pakete und Versionen erhalten Sie, indem Sie die Ansicht INFORMATION_SCHEMA.PACKAGES unter Angabe der Sprache abfragen. Beispiel:
SELECT * FROM information_schema.packages WHERE language = '<language>';
wobei
language
(Sprache) den Wertjava
,python
oderscala
hat.Die Syntax für den Verweis auf ein Paket in der PACKAGES-Klausel variiert je nach der Sprache des Pakets, wie unten beschrieben.
Java
Geben Sie den Paketnamen und die Versionsnummer in der folgenden Form an:
domain:package_name:version
Für die neueste Version geben Sie
latest
fürversion
an.Um beispielsweise ein Paket aus der neuesten Snowpark-Bibliothek in Snowflake einzubinden, verwenden Sie Folgendes:
PACKAGES = ('com.snowflake:snowpark:latest')
Wenn Sie ein Paket aus der Snowpark-Bibliothek angeben, müssen Sie Version 1.3.0 oder höher angeben.
Python
Snowflake enthält eine große Anzahl von Paketen, die über Anaconda verfügbar sind. Weitere Informationen dazu finden Sie unter Verwenden von Drittanbieter-Paketen.
Geben Sie den Paketnamen und die Versionsnummer in der folgenden Form an:
package_name[==version]
Um die neueste Version anzugeben, lassen Sie die Versionsnummer weg.
Um beispielsweise Version 2.3.5 des spacy-Pakets (zusammen mit der neuesten Version des erforderlichen Snowpark-Pakets) einzubinden, verwenden Sie Folgendes:
PACKAGES = ('snowflake-snowpark-python', 'spacy==2.3.5')
Wenn Sie ein Paket aus der Snowpark-Bibliothek angeben, müssen Sie Version 0.4.0 oder höher angeben. Lassen Sie die Versionsnummer weg, um die neueste in Snowflake verfügbare Version zu verwenden.
Scala
Geben Sie den Paketnamen und die Versionsnummer in der folgenden Form an:
domain:package_name:version
Für die neueste Version geben Sie
latest
fürversion
an.Um beispielsweise ein Paket aus der neuesten Snowpark-Bibliothek in Snowflake einzubinden, verwenden Sie Folgendes:
PACKAGES = ('com.snowflake:snowpark:latest')
Snowflake unterstützt die Verwendung von Snowpark, Version 0.9.0 oder höher in einer Scala-Prozedur. Beachten Sie jedoch, dass diese Versionen Einschränkungen haben. So unterstützen Versionen vor 1.1.0 beispielsweise nicht die Verwendung von Transaktionen in einer Prozedur.
HANDLER = 'fully_qualified_method_name'
Python
Verwenden Sie den Namen der Funktion oder Methode der Prozedur. Dies kann unterschiedlich sein, je nachdem, ob der Code inline ist oder er in einem Stagingbereich referenziert wird.
Wenn der Code inline ist, können Sie nur den Funktionsnamen angeben, wie im folgenden Beispiel:
WITH myproc AS PROCEDURE() ... HANDLER = 'run' AS $$ def run(session): ... $$ CALL myproc();
Wenn der Code aus einem Stagingbereich importiert wird, geben Sie den vollqualifizierten Namen der Handlerfunktion als
<Name_des_Moduls>.<Name_der_Funktion>
an.WITH myproc AS PROCEDURE() ... IMPORTS = ('@mystage/my_py_file.py') HANDLER = 'my_py_file.run' CALL myproc();
Java und Scala
Verwenden Sie den vollqualifizierten Namen der Methode oder Funktion der Prozedur. Dies geschieht typischerweise in der folgenden Form:
com.my_company.my_package.MyClass.myMethod
Wobei:
com.my_company.my_package
entspricht dem Paket, das das Objekt oder die Klasse enthält:
package com.my_company.my_package;
Optionale Parameter¶
Alle Sprachen¶
CALLED ON NULL INPUT
oder .RETURNS NULL ON NULL INPUT | STRICT
Gibt das Verhalten der Prozedur an, wenn sie mit Null-Eingaben aufgerufen wird. Im Gegensatz zu systemdefinierten Funktionen, die immer Null zurückgeben, wenn eine Eingabe Null ist, können Prozeduren Null-Eingaben verarbeiten und Nicht-Null-Werte zurückgeben, auch wenn eine Eingabe Null ist:
CALLED ON NULL INPUT
ruft die Prozeduren immer mit Null-Eingaben auf. Es liegt an der Prozedur, mit solchen Werten angemessen umzugehen.RETURNS NULL ON NULL INPUT
(oder dessen SynonymSTRICT
) ruft die Prozedur nicht auf, wenn eine Eingabe Null ist, sodass die Anweisungen in der Prozedur nicht ausgeführt werden. Stattdessen wird immer ein Null-Wert zurückgegeben. Beachten Sie, dass die Prozedur bei Nicht-Null-Eingaben immer noch Null zurückgeben kann.
Standard:
CALLED ON NULL INPUT
INTO :snowflake_scripting_variable
Setzt die angegebene Snowflake Scripting-Variable auf den Rückgabewert der gespeicherten Prozedur.
Java, Python oder Scala¶
IMPORTS = ( 'stage_path_and_file_name_to_read' [, 'stage_path_and_file_name_to_read' ...] )
Der Speicherort (Stagingbereich), der Pfad und der Name der zu importierenden Datei(en). Sie müssen die
IMPORTS
-Klausel festlegen, um alle Dateien einzuschließen, von denen Ihre Prozedur abhängt:Wenn Sie eine Inline-Prozedur schreiben, können Sie diese Klausel weglassen, es sei denn, Ihr Code hängt von Klassen ab, die außerhalb der Prozedur oder der Ressourcendateien definiert sind.
Java oder Scala: Wenn Sie eine Prozedur schreiben, deren Handler kompilierter Code ist, müssen Sie auch einen Pfad zu der JAR-Datei angeben, die den Handler der Prozedur enthält.
Python: Wenn sich der Code Ihrer Prozedur in einem Stagingbereich befindet, müssen Sie auch einen Pfad zu der Moduldatei angeben, in der sich der Code befindet.
Jede Datei in der
IMPORTS
-Klausel muss einen eindeutigen Namen haben, auch wenn sich die Dateien in verschiedenen Unterverzeichnissen oder verschiedenen Stagingbereichen befinden.
Nutzungshinweise¶
Allgemeine Nutzung¶
Prozeduren sind nicht atomar. Wenn eine Anweisung in einer Prozedur fehlschlägt, werden die anderen Anweisungen in der Prozedur nicht unbedingt zurückgesetzt. Weitere Informationen zu Prozeduren und Transaktionen finden Sie unter Transaktionsmanagement.
Eine Prozedur kann nur einen einzigen Wert zurückgeben, z. B. eine Zeichenfolge (beispielsweise einen Erfolg/Fehler-Indikator) oder eine Zahl (z. B. einen Fehlercode). Wenn Sie umfangreichere Daten zurückgeben müssen, können Sie einen VARCHAR-Wert verwenden, der durch ein Trennzeichen (z. B. ein Komma) getrennte Werte enthält, oder Sie verwenden einen Datentyp für semistrukturierte Daten wie VARIANT.
Metadaten:
Achtung
Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.
Syntax¶
Ähnlich wie bei der Verwendung einer WITH-Klausel mit einer SELECT-Anweisung können bei der Verwendung einer WITH-Klausel mit CALL zusätzlich zur Prozedurdefinition mehrere durch Kommas getrennte CTEs angegeben werden. Es ist jedoch nicht möglich, tabellarische Werte, die durch eine WITH-Klausel erzeugt wurden, an die CALL-Klausel zu übergeben.
Es ist jedoch möglich, eine einfache Variable anzugeben, deren Wert in der WITH-Klausel zugewiesen wird.
Die CALL-Klausel muss in der Syntax an letzter Stelle stehen.
Berechtigungen¶
Das Erstellen und Aufrufen einer Prozedur mit diesem Befehl erfordert keine Rolle mit CREATE PROCEDURE-Schemaberechtigungen.
Der Handler-Code der Prozedur kann nur Aktionen ausführen, die für die Rolle der Person, die diesen Befehl ausgeführt hat, zulässig sind.
Hinweise zu Programmiersprachen¶
Bei Java-Prozeduren sind die bekannten Einschränkungen zu beachten.
Bei Python-Prozeduren sind die bekannten Einschränkungen zu beachten.
Bei Scala-Prozeduren sind die bekannten Einschränkungen zu beachten.
Beispiele¶
Im folgenden Beispiel wird eine Prozedur erstellt und aufgerufen, bei der die Argumente über die Position angegeben werden:
WITH copy_to_table AS PROCEDURE (fromTable STRING, toTable STRING, count INT)
RETURNS STRING
LANGUAGE SCALA
RUNTIME_VERSION = '2.12'
PACKAGES = ('com.snowflake:snowpark:latest')
HANDLER = 'DataCopy.copyBetweenTables'
AS
$$
object DataCopy
{
def copyBetweenTables(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =
{
session.table(fromTable).limit(count).write.saveAsTable(toTable)
return "Success"
}
}
$$
CALL copy_to_table('table_a', 'table_b', 5);
Im folgenden Beispiel wird eine Prozedur erstellt und aufgerufen, bei der die Argumente über den Namen angegeben werden:
WITH copy_to_table AS PROCEDURE (fromTable STRING, toTable STRING, count INT)
RETURNS STRING
LANGUAGE SCALA
RUNTIME_VERSION = '2.12'
PACKAGES = ('com.snowflake:snowpark:latest')
HANDLER = 'DataCopy.copyBetweenTables'
AS
$$
object DataCopy
{
def copyBetweenTables(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =
{
session.table(fromTable).limit(count).write.saveAsTable(toTable)
return "Success"
}
}
}
$$
CALL copy_to_table(
toTable => 'table_b',
count => 5,
fromTable => 'table_a');
Weitere Beispiele finden Sie unter den folgenden Themen:
Beispiele für Java-Prozeduren finden Sie unter Schreiben von gespeicherten Prozeduren in Java.
Beispiele für Python-Prozeduren finden Sie unter Schreiben von gespeicherten Prozeduren in Python.
Beispiele für Scala-Prozeduren finden Sie unter Schreiben von gespeicherten Prozeduren in Scala.
Beispiele für gespeicherte Prozeduren in Snowflake Scripting finden Sie unter Schreiben von gespeicherten Prozeduren in Snowflake Scripting.
Weitere Beispiele für Prozeduren finden Sie unter Verwenden von gespeicherten Prozeduren.