DECLARE (Script Snowflake)¶
Declara uma ou mais variáveis, cursores, RESULTSETs, procedimentos armazenados aninhados ou exceções do Script Snowflake.
Para obter mais informações, consulte os seguintes tópicos:
- Consulte também:
Sintaxe¶
DECLARE
{ <variable_declaration>
| <cursor_declaration>
| <resultset_declaration>
| <nested_stored_procedure_declaration>
| <exception_declaration> };
[
{ <variable_declaration>
| <cursor_declaration>
| <resultset_declaration>
| <nested_stored_procedure_declaration>
| <exception_declaration> };
...
]
As seções seguintes descrevem a sintaxe para cada tipo de instrução com mais detalhes:
Sintaxe da instrução variável¶
Use a seguinte sintaxe para declarar uma variável:
<variable_declaration> ::=
<variable_name> [<type>] [ { DEFAULT | := } <expression>]
Onde:
variable_name
O nome da variável. O nome deve seguir as regras de nomenclatura para Identificadores de objetos.
type
DEFAULT expression
ou .:= expression
Atribui o valor de
expression
à variável. Se ambostype
eexpression
forem especificados, a expressão deve ser avaliada como um tipo de dados que corresponda, ou pode ser implicitamente convertida notype
especificado.
Por exemplo:
profit NUMBER(38, 2) := 0;
Para um exemplo completo, consulte Exemplos.
Para obter mais informações sobre variáveis, consulte Como trabalhar com variáveis.
Sintaxe da instrução do cursor¶
Use a seguinte sintaxe para declarar um cursor.
<cursor_declaration> ::=
<cursor_name> CURSOR FOR <query>
Onde:
cursor_name
O nome a ser dado ao cursor. Ele pode ser qualquer identificador válido do Snowflake que ainda não esteja em uso neste bloco. O identificador é usado por outros comandos relacionados ao cursor, tais como
FETCH
.query
A consulta que define o conjunto de resultados sobre os quais o cursor faz iteração.
Isso pode ser quase qualquer instrução SELECT válida. Para especificar parâmetros de vinculação na instrução SELECT, use pontos de interrogação (
?
). Você pode vincular os parâmetros para vincular variáveis na cláusula USING quando você abre o cursor.
Por exemplo:
c1 CURSOR FOR SELECT id, price FROM invoices;
Para obter mais informações sobre cursores (incluindo exemplos completos), consulte Como trabalhar com cursores.
Sintaxe da instrução RESULTSET¶
Use a seguinte sintaxe para declarar um RESULTSET.
<resultset_name> RESULTSET [ { DEFAULT | := } [ ASYNC ] ( <query> ) ] ;
Onde:
resultset_name
O nome a ser dado ao RESULTSET.
O nome deve ser único dentro do escopo atual.
O nome deve seguir as regras de nomenclatura para Identificadores de objetos.
ASYNC
Executa a consulta como um trabalho filho assíncrono.
A consulta pode ser qualquer instrução SQL válida, incluindo instruções SELECT e instruções DML, como INSERT ou UPDATE.
Quando essa palavra-chave é omitida, o procedimento armazenado executa os trabalhos secundários sequencialmente, e cada trabalho secundário aguarda a conclusão do trabalho secundário em execução antes de iniciar.
É possível usar essa palavra-chave para executar vários trabalhos secundários simultaneamente, o que pode aumentar a eficiência e reduzir o tempo total de execução.
É possível usar as instruções AWAIT e CANCEL para gerenciar trabalhos filho assíncronos para um RESULTSET.
DEFAULT query
ou .:= query
Atribui o valor de
query
a RESULTSET.
Por exemplo:
res RESULTSET DEFAULT (SELECT col1 FROM mytable ORDER BY col1);
Para obter mais informações sobre RESULTSETs (incluindo exemplos completos), consulte Como trabalhar com RESULTSETs.
Sintaxe da instrução do procedimento armazenado aninhado¶
Use a seguinte sintaxe para declarar um procedimento armazenado aninhado:
<nested_procedure_name> PROCEDURE (
[ <arg_name> <arg_data_type> ] [ , ... ] )
RETURNS { <result_data_type> | TABLE ( [ <col_name> <col_data_type> [ , ... ] ] ) }
AS <nested_procedure_definition>
Onde:
nested_procedure_name
O nome do procedimento armazenado aninhado. O nome deve seguir as regras de nomenclatura para Identificadores de objetos.
( [ arg_name arg_data_type ] [ , ... ] )
Especifica os argumentos de entrada para o procedimento armazenado aninhado.
Para
arg_name
, especificar o nome do argumento de entrada.Para
arg_data_type
, especifique um tipo de dados SQL.
RETURNS { result_data_type | TABLE ( [ col_name col_data_type [ , ... ] ] ) }
Especifica o tipo do resultado retornado pelo procedimento armazenado. Atualmente, NOT NULL não é compatível no parâmetro RETURNS para procedimentos armazenados aninhados.
Para
RETURNS result_data_type
, especifique um tipo de dados SQL.Para
RETURNS TABLE ( [ col_name col_data_type [ , ... ] ] )
, se você conhecer os tipo de dados Snowflake das colunas na tabela retornada, especificar os nomes e tipos das colunas:RETURNS TABLE (sales_date DATE, quantity NUMBER)
Caso contrário (por exemplo, se você estiver determinando os tipos de coluna durante o tempo de execução), você pode omitir os nomes e tipos de coluna:
RETURNS TABLE ()
Nota
Atualmente, na cláusula
RETURNS TABLE(...)
, você não pode especificar GEOGRAPHY como um tipo de coluna. Isso se aplica se você estiver criando um procedimento armazenado ou anônimo.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();
Se você tentar especificar GEOGRAPHY como um tipo de coluna, chamar o procedimento armazenado resultará no erro:
Stored procedure execution error: data type of returned table does not match expected returned table type
Para contornar este problema, você pode omitir os argumentos da coluna e digitar
RETURNS TABLE()
.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();
AS nested_procedure_definition
Define o código executado pelo procedimento armazenado aninhado. A definição pode consistir em qualquer código válido.
Sintaxe da instrução de exceção¶
Use a seguinte sintaxe para declarar uma exceção.
<exception_name> EXCEPTION [ ( <exception_number> , '<exception_message>' ) ] ;
Onde:
exception_name
O nome a ser dado à exceção.
exception_number
Um número para identificar a exceção de forma única. O número deve ser um número inteiro entre -20000 e -20999. O número não deve ser utilizado para nenhuma outra exceção que exista ao mesmo tempo.
Padrão: -20000
exception_message
Uma mensagem para descrever a exceção. A mensagem não deve conter nenhum caractere de aspas duplas.
Padrão: cadeia de caracteres vazia.
Por exemplo:
exception_could_not_create_table EXCEPTION (-20003, 'ERROR: Could not create table.');
Para obter mais informações sobre exceções (incluindo exemplos completos), consulte Tratamento de exceções.
Exemplos¶
Este exemplo declara uma variável chamada profit
para uso em um bloco anônimo do Snowflake Scripting:
DECLARE
profit number(38, 2) DEFAULT 0.0;
BEGIN
LET cost number(38, 2) := 100.0;
LET revenue number(38, 2) DEFAULT 110.0;
profit := revenue - cost;
RETURN profit;
END;
Observação: se você usar o Snowflake CLI, SnowSQL, o Classic Console, ou o método execute_stream
ou execute_string
no código Python Connector, use este exemplo (consulte Usar o Snowflake Scripting no Snowflake CLI, SnowSQL, Classic Console e Python Connector):
EXECUTE IMMEDIATE
$$
DECLARE
profit number(38, 2) DEFAULT 0.0;
BEGIN
LET cost number(38, 2) := 100.0;
LET revenue number(38, 2) DEFAULT 110.0;
profit := revenue - cost;
RETURN profit;
END;
$$
;
Para mais exemplos que declaram variáveis, cursores, RESULTSETs e exceções, consulte os seguintes tópicos: