Partilhar via


CRIAR PROCEDIMENTO

Importante

Este recurso está no Public Preview.

Aplica-se a:marcado sim Databricks SQL Databricks Runtime 17.0 e acima marcado sim Unity Catalog somente

Cria um procedimento no Unity Catalog 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âmetros posicionais, pode-se também invocar procedimentos usando invocação de parâmetros nomeados.

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 é substituído. Não é possível 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 nota 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 ouOUT

      Opcionalmente, descreve o modo do parâmetro.

      • EM

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

      • INOUT

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

      • FORA

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

    • tipo_de_dados

      Qualquer tipo de dados suportado.

    • 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 poder ser convertível para data_type. A expressão não deve fazer referência a outro parâmetro ou conter uma subconsulta.

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

      DEFAULT não é suportado para OUT parâmetros.

    • COMENTÁRIO comentário

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

  • declaração_composta

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

    Quando o procedimento é criado, a correção sintática é validada. O corpo do procedimento não é validado quanto à 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 SQL

      Especifica que todas as instruções SQL no corpo do procedimento serão executadas sob a autoridade do usuário que invoca 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 é assumido como não determinístico, o que significa que 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. A predefinição é NULL.

    • AGRUPAMENTO PADRÃO UTF8_BINARY

      Aplica-se a:check marked yes Databricks SQL check marked yes Databricks Runtime 17.1 e superior

      Força a ordenação padrão do procedimento para UTF8_BINARY. Esta cláusula é obrigatória se o esquema no qual o procedimento é criado tiver um agrupamento padrão diferente de UTF8_BINARY. O agrupamento padrão do procedimento é usado como o agrupamento padrão para parâmetros de procedimento e o agrupamento padrão para todos os literais de cadeia de caracteres e variáveis locais no corpo do procedimento.

    • MODIFICA DADOS SQL

      Presume-se que um procedimento modifique 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!