CALL¶
Chama um procedimento armazenado.
- Consulte também:
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
).Observe o seguinte:
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.
Ao especificar um argumento por nome, você não pode usar aspas duplas no nome do argumento.
Se duas funções ou dois procedimentos tiverem o mesmo nome, mas tipos de argumento diferentes, você poderá usar os nomes dos argumentos para especificar qual função ou procedimento executar, se os nomes dos argumentos forem diferentes. Consulte 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);
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.
Cuidado
Nested calls can exceed the maximum allowed stack depth, so be careful when nesting calls, especially when using recursion.
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;
Observação: se você estiver usando o método SnowSQL, o Classic Console, execute_stream
ou execute_string
no código Python Connector, use este exemplo (consulte Uso do Script Snowflake em SnowSQL, Classic Console e conector Python):
EXECUTE IMMEDIATE $$
DECLARE
ret1 NUMBER;
BEGIN
CALL sv_proc1('Manitoba', 127.4) into :ret1;
RETURN ret1;
END;
$$
;