Partilhar via


LIGAR

Importante

Este recurso está no Public Preview.

Aplica-se a:marcado Databricks SQL marcado sim Databricks Runtime 17.0 e superiores

Chama um procedimento armazenado pelo nome e transmite argumentos para e desde o procedimento.

As chamadas de procedimento podem ser aninhadas em até 64 níveis.

Observação

A instrução CALL não é suportada no ODBC.

Sintaxe

CALL procedure_name( [ argument [, …] ]
                     [ namedParameter => argument ] [, ...] )

Parâmetros

  • procedure_name

    O nome do procedimento a ser invocado. O nome do procedimento pode ser opcionalmente qualificado com um nome de esquema. Se o nome não estiver qualificado, o procedimento será resolvido no esquema atual. Se o procedimento não existir, é gerado um ROUTINE_NOT_FOUND erro.

  • argumento

    Para argumentos atribuídos a IN parâmetros, qualquer expressão de um tipo que possa ser convertida para o parâmetro ou a DEFAULT palavra-chave. Para OUT e INOUT parâmetros, o argumento deve ser uma variável de sessão ou variável local.

    Se o procedimento falhar, os valores de argumento dos OUT parâmetros e INOUT permanecerão inalterados.

    Observação

    O argumento deve corresponder ao tipo de dado do parâmetro. Isto inclui especificar, por exemplo: DATE'2015-01-01', em vez de '2015-01-01' para um DATE parâmetro.

  • namedParameter

    O nome não qualificado de um parâmetro ao qual o argExpr é atribuído.

O número de argumentos não deve ser maior do que o número de parâmetros especificados para o procedimento. Se você especificar menos argumentos do que os parâmetros, os parâmetros deverão ser definidos com DEFAULT valores.

Exemplos

> CREATE OR REPLACE PROCEDURE area_of_rectangle
     (IN x INT, IN y INT, OUT area INT, INOUT acc INT)
    LANGUAGE SQL
    SQL SECURITY INVOKER
    AS BEGIN
      SET area = x * y;
      SET acc = acc + area;
      SELECT 'Area of rectangle is: ' || area;
    END;

-- Session varables to handle OUT and INOUT parameters
> DECLARE area INT;
> DECLARE acc INT DEFAULT 10;

-- Invocation by position
> CALL area_of_rectangle(5, 10, area, acc);
  Area of rectangle is: 50
> SELECT area, acc;
  area  acc
  —---  —--
    50   60

-- Invocation by name
> CALL area_of_rectangle(y => 10, x => 5, area => area, acc => acc);
  Area of rectangle is: 50
> SELECT area, acc;
  area  acc
  —---  —--
    50  120