CALL

Chama um procedimento armazenado.

Consulte também:

CREATE PROCEDURE , SHOW PROCEDURES

Sintaxe

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

Parâmetros obrigatórios

procedure_name ( [ [ arg_name => ] arg , ... ] )

Especifica o identificador (procedure_name) para o procedimento a ser chamado e quaisquer argumentos de entrada.

Você pode especificar os argumentos de entrada por nome (arg_name => arg) ou por posição (arg).

Nota

  • Você deve especificar todos os argumentos por nome ou por posição. Você não pode especificar alguns dos argumentos por nome e outros argumentos por posição.

  • When you specify an argument by name, you can’t use double quotes around the argument name.

  • If two procedures have the same name but different argument types, you can use the argument names to specify which procedure to execute, if the argument names are different. For more information, see Sobrecarga de procedimentos e funções.

Parâmetros opcionais

INTO :snowflake_scripting_variable

Define a variável do Script Snowflake especificada para o valor de retorno do procedimento armazenado.

Exemplos

Para exemplos mais extensos de criação e chamada de procedimentos armazenados, consulte Como trabalhar com procedimentos armazenados.

CALL stproc1(5.14::FLOAT);

Cada argumento para um procedimento armazenado pode ser uma expressão geral:

CALL stproc1(2 * 5.14::FLOAT);

Um argumento pode ser uma subconsulta:

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

Você pode chamar apenas um procedimento armazenado por instrução CALL. Por exemplo, a seguinte instrução apresenta falha:

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

Além disso, não se pode usar um procedimento armazenado CALL como parte de uma expressão. Por exemplo, todas as instruções a seguir apresentam falha:

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

Entretanto, dentro de um procedimento armazenado, o procedimento armazenado pode chamar outro procedimento armazenado ou chamar a si mesmo recursivamente.

Cuidado

As chamadas aninhadas podem exceder a profundidade máxima permitida da pilha, portanto, tenha cuidado ao aninhar chamadas, especialmente ao usar recursão.

O exemplo a seguir chama um procedimento armazenado chamado sv_proc1 e passa em uma cadeia de cadeia de caracteres literal e numérica como argumentos de entrada. O exemplo especifica os argumentos por posição:

CALL sv_proc1('Manitoba', 127.4);

Você também pode especificar os argumentos por seus nomes:

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

O exemplo a seguir demonstra como definir e passar uma variável de sessão como um argumento de entrada para um procedimento armazenado:

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

A seguir é mostrado um exemplo de um bloco do Script Snowflake que captura o valor de retorno de um procedimento armazenado em uma variável do Script Snowflake.

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

Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the execute_stream or execute_string method in Python Connector code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):

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