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:

EXECUTE IMMEDIATE

Sintaxe

EXECUTE IMMEDIATE
  FROM { absoluteFilePath | relativeFilePath }
Copy

Onde:

absoluteFilePath ::=
   @[ <namespace>. ]<stage_name>/<path>/<filename>
Copy
relativeFilePath ::=
  '[ { ./ | / | { ../ [ , ../, ... ] } } ]<path>/<filename>'
Copy

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 ou schema_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 básicos.

    • 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 para my_stage:

    PUT file://~/sql/scripts/my_file.sql @my_stage/scripts/
      AUTO_COMPRESS=FALSE;
    
    Copy
  • 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.

Exemplos

Exemplos básicos

Este exemplo executa o arquivo create-inventory.sql localizado no estágio my_stage.

  1. 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;
    
    Copy
  2. 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);
    
    Copy
  3. Crie um estágio interno my_stage:

    CREATE STAGE my_stage;
    
    Copy
  4. 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;
    
    Copy
  5. Execute o script create-inventory.sql localizado em my_stage:

    EXECUTE IMMEDIATE FROM @my_stage/scripts/create-inventory.sql;
    
    Copy

    Retorna:

    +----------+-------+
    | SKU      | PRICE |
    |----------+-------|
    | XYZ81974 |    50 |
    | XYZ34985 |    30 |
    | XYZ15324 |    15 |
    | XYZ12345 |    10 |
    +----------+-------+