CALL

Ruft eine gespeicherte Prozedur auf.

Siehe auch:

CREATE PROCEDURE, SHOW PROCEDURES

Syntax

CALL <procedure_name> ( [ [ <arg_name> => ] <arg> , ... ] )
  [ INTO :<snowflake_scripting_variable> ]
Copy

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);
Copy

Jedes Argument für eine gespeicherte Prozedur kann ein allgemeiner Ausdruck sein:

CALL stproc1(2 * 5.14::FLOAT);
Copy

Ein Argument kann eine Unterabfrage sein:

CALL stproc1(SELECT COUNT(*) FROM stproc_test_table1);
Copy

Sie können nur eine gespeicherte Prozedur pro CALL-Anweisung aufrufen. Zum Beispiel schlägt die folgende Aussagen fehl:

CALL proc1(1), proc2(2);                          -- Not allowed
Copy

Außerdem können Sie den CALL einer gespeicherten Prozedur nicht als Teil eines Ausdrucks verwenden. Beispielsweise schlagen alle folgenden Anweisungen fehl:

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
Copy

Innerhalb einer gespeicherten Prozedur kann die gespeicherte Prozedur jedoch eine andere gespeicherte Prozedur aufrufen oder sich selbst rekursiv aufrufen.

Vorsicht

Verschachtelte Aufrufe können die maximal zulässige Stapeltiefe überschreiten. Seien Sie daher vorsichtig, wenn Sie Aufrufe verschachteln, insbesondere bei Gebrauch der Rekursion.

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);
Copy

Sie können die Argumente auch über den Namen übergeben:

CALL sv_proc1(province => 'Manitoba', amount => 127.4);
Copy

Das folgende Beispiel zeigt, wie eine Sitzungsvariable als Eingabeargument festgelegt und an eine gespeicherte Prozedur übergeben wird:

SET Variable1 = 49;
CALL sv_proc2($Variable1);
Copy

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;
Copy

Hinweis: Wenn Sie Snowflake CLI, SnowSQL, die Classic Console, oder die Methode execute_stream oder execute_string in Python Connector Code verwenden, benutzen Sie stattdessen dieses Beispiel (siehe Verwenden von Snowflake Scripting in Snowflake CLI, SnowSQL, Classic Console und im Python-Connector):

EXECUTE IMMEDIATE $$
DECLARE
  ret1 NUMBER;
BEGIN
  CALL sv_proc1('Manitoba', 127.4) into :ret1;
  RETURN ret1;
END;
$$
;
Copy