Compartilhar via


CRIAR PROCEDIMENTO

Importante

Esse recurso está em Visualização Pública.

Aplica-se a:check marcado sim Databricks SQL Databricks Runtime 17.0 e superior check marcado sim apenas para Unity Catalog

Cria um procedimento no Catálogo do Unity que usa ou modifica argumentos, executa um conjunto de instruções SQL e, opcionalmente, retorna um conjunto de resultados.

Além da invocação de parâmetro posicional, você também pode invocar procedimentos usando invocação de parâmetro nomeado.

Observação

Os procedimentos não podem ser chamados do ODBC.

Sintaxe

CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]
    procedure_name ( [ procedure_parameter [, ...] ] )
    [ characteristic [...] ]
    AS compound_statement

procedure_parameter
    [ IN | OUT | INOUT ] parameter_name data_type
    [ DEFAULT default_expression ] [ COMMENT parameter_comment ]

characteristic
  { LANGUAGE SQL |
    SQL SECURITY INVOKER |
    NOT DETERMINISTIC |
    COMMENT procedure_comment |
    DEFAULT COLLATION UTF8_BINARY |
    MODIFIES SQL DATA }

Parâmetros

  • OU SUBSTITUIR

    Se especificado, um procedimento com o mesmo nome será substituído. Você não pode substituir uma função existente por um procedimento. Não é possível especificar esse parâmetro com IF NOT EXISTS.

  • SE NÃO EXISTIR

    Se especificado, cria o procedimento somente quando um procedimento com essa anotação ainda não existe. Se existir um procedimento com o mesmo nome, a instrução será ignorada. Não é possível especificar esse parâmetro com OR REPLACE.

  • procedure_name

    Um nome para o procedimento. Opcionalmente, você pode qualificar o nome do procedimento com um nome de esquema. Se o nome não for qualificado, o procedimento permanente será criado no esquema atual.

    O nome do procedimento deve ser exclusivo para todas as rotinas (procedimentos e funções) no esquema.

  • procedure_parameter

    Especifica um parâmetro do procedimento.

    • parameter_name

      O nome do parâmetro deve ser exclusivo dentro do procedimento.

    • IN, INOUT ou OUT

      Opcionalmente, descreve o modo do parâmetro.

      • IN

        Define um parâmetro somente de entrada. Esse é o padrão.

      • INOUT

        Define um parâmetro que aceita um argumento de entrada-saída. Se o procedimento for concluído sem um erro não tratado, ele retornará o valor final do parâmetro como saída.

      • OUT

        Define um parâmetro de saída. O parâmetro é inicializado NULL e, se o procedimento for concluído sem um erro não tratado, retornará o valor final do parâmetro como saída.

    • tipo_de_dado

      Qualquer tipo de dados com suporte.

    • PADRÃO default_expression

      Um padrão opcional a ser usado quando uma invocação de função não atribui um argumento ao parâmetro. default_expression deve ser conversível em data_type. A expressão não deve fazer referência a outro parâmetro nem conter uma subconsulta.

      Quando você especifica um padrão para um parâmetro, todos os parâmetros seguintes também devem ter um padrão.

      DEFAULT não há suporte para OUT parâmetros.

    • Comentário COMMENT

      Uma descrição opcional do parâmetro. comment deve ser uma literal de STRING.

  • declaração_composta

    Uma instrução composta SQL (BEGIN ... END) com a definição do Procedimento SQL.

    Quando o procedimento é criado, a correção sintactica é validada. O corpo do procedimento não é validado para correção semântica até que o procedimento seja invocado.

  • característica

    A característica SQL SECURITY INVOKER e LANGUAGE SQL são necessárias. Todos os outros são opcionais. Você pode especificar qualquer número de características em qualquer ordem, mas pode especificar cada cláusula apenas uma vez.

    • Linguagem SQL

      A linguagem da implementação da função.

    • INVOCADOR DE SEGURANÇA DO SQL

      Especifica que quaisquer instruções SQL no corpo do procedimento serão executadas sob a autoridade do usuário invocando o procedimento.

      Ao resolver relações e rotinas dentro do corpo do procedimento, o Azure Databricks usa o catálogo atual e o esquema atual no momento da invocação.

    • NÃO DETERMINÍSTICO

      Um procedimento é considerado não determinístico, o que significa que ele pode retornar resultados diferentes em cada invocação, mesmo quando é chamado com os mesmos argumentos.

    • COMENTÁRIO procedure_comment

      Um comentário para o procedimento. procedure_comment deve ser STRING literal. O padrão é NULL.

    • COLAÇÃO PADRÃO UTF8_BINARY

      Aplica-se a:check marked yes Databricks SQL check marked yes Databricks Runtime 17.1 and above

      Força a ordenação padrão do procedimento para UTF8_BINARY. Essa cláusula será obrigatória se o esquema no qual o procedimento for criado tiver uma ordenação padrão diferente de UTF8_BINARY. A ordenação padrão do procedimento é usada como ordenação padrão para parâmetros de procedimento e a ordenação padrão padrão para todos os literais de cadeia de caracteres e variáveis locais no corpo do procedimento.

    • MODIFICA DADOS SQL

      Supõe-se que um procedimento modifique os dados SQL.

Exemplos

-- Demonstrate INOUT and OUT parameter usage.
> CREATE OR REPLACE PROCEDURE add(x INT, y INT, OUT sum INT, INOUT total INT)
    LANGUAGE SQL
    SQL SECURITY INVOKER
    COMMENT 'Add two numbers'
    AS BEGIN
        SET sum = x + y;
        SET total = total + sum;
    END;
> DECLARE sum INT;
> DECLARE total INT DEFAULT 0;
> CALL add(1, 2, sum, total);
> SELECT sum, total;
 3 3
> CALL add(3, 4, sum, total);
 7 10

-- The last executed query is the result set of a procedure
> CREATE PROCEDURE greeting(IN mode STRING COMMENT 'informal or formal')
    LANGUAGE SQL
    SQL SECURITY INVOKER
    AS BEGIN
        SELECT 'Hello!';
        CASE mode WHEN 'informal' THEN SELECT 'Hi!';
                  WHEN 'formal' THEN SELECT 'Pleased to meet you.';
        END CASE;
    END;
> CALL greeting('informal');
  Hi!

> CALL greeting('formal');
  Pleased to meet you.

> CALL greeting('casual');
  Hello!