EXECUTE IMMEDIATE FROM¶
EXECUTE IMMEDIATE FROM executa as instruções SQL especificadas em um arquivo em um estágio. O arquivo pode conter instruções SQL ou blocos do Script Snowflake. As instruções devem ser instruções SQL sintaticamente corretas.
Você pode usar o comando EXECUTE IMMEDIATE FROM para executar as instruções em um arquivo de qualquer sessão do Snowflake.
Esse recurso fornece um mecanismo para controlar a implantação e o gerenciamento de objetos e códigos do Snowflake. Por exemplo, você pode executar um script armazenado para criar um ambiente Snowflake padrão para todas as suas contas. O script de configuração pode incluir instruções que criam usuários, funções, bancos de dados e esquemas para cada nova conta.
- Consulte também:
Sintaxe¶
EXECUTE IMMEDIATE
FROM { absoluteFilePath | relativeFilePath }
Onde:
absoluteFilePath ::= @[ <namespace>. ]<stage_name>/<path>/<filename>relativeFilePath ::= '[ { ./ | / | { ../ [ , ../, ... ] } } ]<path>/<filename>'
Caminho absoluto do arquivo (absoluteFilePath
)¶
namespace
Banco de dados e/ou esquema no qual está o estágio interno ou externo, na forma de
database_name.schema_name
ouschema_name
. O namespace é opcional se um banco de dados e esquema estiverem em uso atualmente para a sessão do usuário; caso contrário, ele é obrigatório.stage_name
Nome do estágio interno ou externo.
path
Caminho que diferencia maiúsculas de minúsculas para o arquivo no estágio.
filename
Nome do arquivo a ser executado. Deve conter instruções SQL sintaticamente corretas e válidas. Cada instrução deve ser separada por ponto e vírgula.
Caminho relativo do arquivo (relativeFilePath
)¶
path
Caminho relativo que diferencia maiúsculas de minúsculas para o arquivo no estágio. Caminhos relativos oferecem suporte a convenções estabelecidas, como um
/
inicial para indicar a raiz do sistema de arquivos de um estágio,./
para se referir ao diretório atual (o diretório no qual o arquivo pai está localizado) e../
para se referir ao diretório pai. Para obter mais informações, consulte Notas de uso.filename
Nome do arquivo a ser executado. Deve conter instruções SQL sintaticamente corretas e válidas. Cada instrução deve ser separada por ponto e vírgula.
Retornos¶
EXECUTE IMMEDIATE FROM retorna:
O resultado da última instrução no arquivo se todas as instruções forem executadas com sucesso.
A mensagem de erro, se alguma instrução no arquivo falhar.
Se houver um erro em qualquer instrução do arquivo, o comando EXECUTE IMMEDIATE FROM falhará e retornará a mensagem de erro da instrução com falha.
Nota
Se o comando EXECUTE IMMEDIATE FROM falhar e retornar uma mensagem de erro, todas as instruções no arquivo anteriores à instrução com falha foram concluídas com êxito.
Requisitos de controle de acesso¶
A função usada para executar o comando EXECUTE IMMEDIATE FROM deve ter o privilégio USAGE (estágio externo) ou READ (estágio interno) no estágio onde o arquivo está localizado.
A função usada para executar o arquivo só pode executar as instruções do arquivo para as quais possui privilégios. Por exemplo, se houver uma instrução CREATE TABLE no arquivo, a função deverá ter os privilégios necessários para criar uma tabela na conta ou a instrução falhará.
Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
As instruções SQL em um arquivo a ser executado podem incluir instruções EXECUTE IMMEDIATE FROM:
Instruções EXECUTE IMMEDIATE FROM aninhadas podem usar caminhos de arquivo relativos.
Os caminhos relativos são avaliados em relação ao estágio e ao caminho do arquivo pai. Se o caminho relativo do arquivo começar com
/
, o caminho começará no diretório raiz do estágio que contém o arquivo pai.Para obter um exemplo, consulte Exemplos.
Caminhos de arquivos relativos devem obrigatoriamente ser colocados entre aspas simples (
'
) ou$$
.A profundidade máxima de execução para arquivos aninhados é 5.
Caminhos de arquivo absolutos podem opcionalmente ser colocados entre aspas simples (
'
) ou$$
.O arquivo a ser executado não pode ter tamanho maior que 10MB.
O arquivo a ser executado deve estar codificado em UTF-8.
O arquivo a ser executado deve estar descompactado. Se você usar o comando PUT para carregar um arquivo para um estágio interno, deverá definir explicitamente o parâmetro AUTO_COMPRESS como FALSE.
Por exemplo, carregue
my_file.sql
paramy_stage
:PUT file://~/sql/scripts/my_file.sql @my_stage/scripts/ AUTO_COMPRESS=FALSE;
A execução de todos os arquivos em um diretório não é suportada. Por exemplo,
EXECUTE IMMEDIATE FROM @stage_name/scripts/
resulta em um erro.
Solução de problemas de EXECUTE IMMEDIATE FROM¶
Esta seção contém alguns erros comuns que resultam de uma instrução EXECUTE IMMEDIATE FROM e como você pode resolvê-los.
Erros de arquivo¶
Erro |
001501 (02000): File '<directory_name>' not found in stage '<stage_name>'.
|
---|---|
Causa |
Existem várias causas para este erro:
|
Solução |
Verifique o nome do arquivo e confirme se ele existe. A execução de todos os arquivos em um diretório não é suportada. |
Erro |
001503 (42601): Relative file references like '<filename.sql>' cannot be used in top-level EXECUTE IMMEDIATE calls.
|
---|---|
Causa |
A instrução foi executada usando um caminho de arquivo relativo fora de uma execução de arquivo. |
Solução |
Um caminho de arquivo relativo só pode ser usado em instruções EXECUTE IMMEDIATE FROM em um arquivo. Use o caminho absoluto do arquivo para o arquivo. Para obter mais informações, consulte Notas de uso. |
Erro |
001003 (42000): SQL compilation error: syntax error line <n> at position <m> unexpected '<string>'.
|
---|---|
Causa |
O arquivo contém erros de sintaxe SQL. |
Solução |
Corrija os erros de sintaxe no arquivo e reenvie o arquivo para o estágio. |
Erros de estágio¶
Erro |
002003 (02000): SQL compilation error: Stage '<stage_name>' does not exist or not authorized.
|
---|---|
Causa |
O estágio não existe ou você não tem acesso ao estágio. |
Solução |
|
Erros de controle de acesso¶
Erro |
003001 (42501): Uncaught exception of type 'STATEMENT_ERROR' in file <file_name> on line <n> at position <m>:
SQL access control error: Insufficient privileges to operate on schema '<schema_name>'
|
---|---|
Causa |
A função usada para executar a instrução não possui os privilégios necessários para executar algumas ou todas as instruções no arquivo. |
Solução |
Use uma função que tenha os privilégios apropriados para executar as instruções no arquivo. Para obter mais informações, consulte Requisitos de controle de acesso. |
Consulte também: Erros de estágio.
Exemplos¶
Este exemplo executa o arquivo create-inventory.sql
localizado no estágio my_stage
.
Crie um arquivo denominado
create-inventory.sql
com as seguintes instruções:CREATE OR REPLACE TABLE my_inventory( sku VARCHAR, price NUMBER ); EXECUTE IMMEDIATE FROM './insert-inventory.sql'; SELECT sku, price FROM my_inventory ORDER BY price DESC;
Crie um arquivo denominado
insert-inventory.sql
com as seguintes instruções:INSERT INTO my_inventory VALUES ('XYZ12345', 10.00), ('XYZ81974', 50.00), ('XYZ34985', 30.00), ('XYZ15324', 15.00);
Crie um estágio interno
my_stage
:CREATE STAGE my_stage;
Carregue dois arquivos locais para o estágio usando o comando PUT:
PUT file://~/sql/scripts/create-inventory.sql @my_stage/scripts/ AUTO_COMPRESS=FALSE; PUT file://~/sql/scripts/insert-inventory.sql @my_stage/scripts/ AUTO_COMPRESS=FALSE;
Execute o script
create-inventory.sql
localizado emmy_stage
:EXECUTE IMMEDIATE FROM @my_stage/scripts/create-inventory.sql;
Retorna:
+----------+-------+ | SKU | PRICE | |----------+-------| | XYZ81974 | 50 | | XYZ34985 | 30 | | XYZ15324 | 15 | | XYZ12345 | 10 | +----------+-------+