CALL¶
Ruft eine gespeicherte Prozedur auf.
- Siehe auch:
Syntax¶
CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
[ INTO :<snowflake_scripting_variable> ]
Erforderliche Parameter¶
procedure_name ( [ [ arg_name => ] arg , ... ] )
Gibt den Bezeichner (
procedure_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.
Optionale Parameter¶
INTO :snowflake_scripting_variable
Setzt die angegebene Snowflake Scripting-Variable auf den Rückgabewert der gespeicherten Prozedur.
Beispiele¶
Ausführlichere Beispiele zum Erstellen und Aufrufen gespeicherter Prozeduren finden Sie unter Verwenden von gespeicherten Prozeduren.
CALL stproc1(5.14::FLOAT);
Each argument to a stored procedure can be a general expression:
CALL stproc1(2 * 5.14::FLOAT);
An argument can be a subquery:
CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
You can call only one stored procedure per CALL statement. For example, the following statement fails:
CALL proc1(1), proc2(2); -- Not allowed
Also, you cannot use a stored procedure CALL as part of an expression. For example, all the following statements fail:
CALL proc1(1) + proc1(2); -- Not allowed
CALL proc1(1) + 1; -- Not allowed
CALL proc1(proc2(x)); -- Not allowed
SELECT * FROM (call proc1(1)); -- Not allowed
However, inside a stored procedure, the stored procedure can call another stored procedure, or call itself recursively.
Vorsicht
Nested calls can exceed the maximum allowed stack depth, so be careful when nesting calls, especially when using recursion.
Im folgenden Beispiel wird eine gespeicherte Prozedur mit dem Namen sv_proc1
aufgerufen, die dabei ein Zeichenfolgenliteral und eine Zahl als Eingabeargumente übergibt: Im Beispiel werden die Argumente über die Position übergeben:
CALL sv_proc1('Manitoba', 127.4);
Sie können die Argumente auch über den Namen übergeben:
CALL sv_proc1(province => 'Manitoba', amount => 127.4);
Das folgende Beispiel zeigt, wie eine Sitzungsvariable als Eingabeargument festgelegt und an eine gespeicherte Prozedur übergeben wird:
SET Variable1 = 49;
CALL sv_proc2($Variable1);
Das folgende Beispiel zeigt einen Snowflake Scripting-Block, der den Rückgabewert einer gespeicherten Prozedur in einer Snowflake Scripting-Variablen speichert.
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
Hinweis: Wenn Sie SnowSQL, die Classic Console oder die execute_stream
- oder execute_string
-Methode im Python-Konnektor-Code verwenden, benutzen Sie stattdessen das folgende Beispiel (siehe Verwenden von Snowflake Scripting in SnowSQL, in der Classic Console und im Python-Konnektor):
EXECUTE IMMEDIATE $$
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
$$
;