Compartir a través de


CREAR PROCEDIMIENTO

Importante

Esta característica está en versión preliminar pública.

Se aplica a:marcado como verificado Databricks SQL Databricks Runtime 17.0 y versiones posteriores, marcado como verificado solo Catálogo de Unity

Crea un procedimiento en el Catálogo de Unity que toma o modifica argumentos, ejecuta un conjunto de instrucciones SQL y, opcionalmente, devuelve un conjunto de resultados.

Además de la invocación de parámetros posicionales, también puede invocar procedimientos mediante la invocación de parámetros con nombre.

Sintaxis

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

  • O REEMPLAZAR

    Si se especifica, se reemplaza un procedimiento con el mismo nombre. No se puede reemplazar una función existente por un procedimiento. No se puede especificar este parámetro con IF NOT EXISTS.

  • SI NO EXISTE

    Si se especifica, crea el procedimiento solo cuando ya no existe un procedimiento con esa nota. Si existe un procedimiento con el mismo nombre, la instrucción se ignora. No se puede especificar este parámetro con OR REPLACE.

  • procedure_name

    Nombre del procedimiento. Opcionalmente, puede calificar el nombre del procedimiento con un nombre de esquema. Si el nombre no está cualificado, el procedimiento permanente se crea en el esquema actual.

    El nombre del procedimiento debe ser único para todas las rutinas (procedimientos y funciones) del esquema.

  • procedure_parameter

    Especifica un parámetro del procedimiento.

    • parameter_name

      El nombre del parámetro debe ser único dentro del procedimiento.

    • IN, INOUT o OUT

      Opcionalmente, describe el modo del parámetro .

      • EN

        Define un parámetro de solo entrada. Este es el valor predeterminado.

      • INOUT

        Define un parámetro que acepta un argumento input-output. Si el procedimiento se completa sin un error no controlado, devolverá el valor final del parámetro como salida.

      • OUT

        Define un parámetro de salida. El parámetro se inicializa en NULL y, si el procedimiento se completa sin un error no controlado, devolverá el valor final del parámetro como salida.

    • tipo_de_datos

      Cualquier tipo de datos admitido.

    • PREDETERMINADO default_expression

      Un valor predeterminado opcional que se usará cuando una invocación de función no asigne un argumento al parámetro. default_expression debe ser convertible para data_type. La expresión no debe hacer referencia a otro parámetro ni contener una subconsulta.

      Cuando se especifica un valor predeterminado para un parámetro, todos los parámetros siguientes también deben tener un valor predeterminado.

      DEFAULT no es compatible con parámetros de OUT.

    • COMENTARIO comentario

      Descripción opcional del parámetro. comment debe ser un literal de STRING.

  • compound_statement

    Instrucción compuesta de SQL (BEGIN ... END) con la definición del procedimiento SQL.

    Cuando se crea el procedimiento, se valida la corrección sintáctica. El cuerpo del procedimiento no se valida para verificar su corrección semántica hasta que se invoca el procedimiento.

  • característica

    La característica SQL SECURITY INVOKER y LANGUAGE SQL son necesarias. Todos los demás son opcionales. Puede especificar cualquier número de características en cualquier orden, pero puede especificar cada cláusula solo una vez.

    • LANGUAGE SQL

      Lenguaje de la implementación de la función.

    • INVOCADOR DE SEGURIDAD DE SQL

      Especifica que las instrucciones SQL del cuerpo del procedimiento se ejecutarán bajo la autoridad del usuario invocando el procedimiento.

      Al resolver las relaciones y rutinas dentro del cuerpo del procedimiento, Azure Databricks usa el catálogo actual y el esquema actual en el momento de la invocación.

    • NO ES DETERMINISTA

      Se supone que un procedimiento no determinista, lo que significa que puede devolver resultados diferentes en cada invocación, incluso cuando se llama con los mismos argumentos.

    • procedure_comment COMENTARIO

      Un comentario sobre el procedimiento. procedure_comment debe ser STRING literal. El valor predeterminado es NULL.

    • INTERCALACIÓN PREDETERMINADA UTF8_BINARY

      Se aplica a:check marcado yes Databricks SQL check marcado yes Databricks Runtime 17.1 y versiones posteriores

      Fuerza la intercalación predeterminada del procedimiento a UTF8_BINARY. Esta cláusula es obligatoria si el esquema en el que se crea el procedimiento tiene una intercalación predeterminada distinta de UTF8_BINARY. La intercalación predeterminada del procedimiento se usa como intercalación predeterminada para los parámetros del procedimiento y como intercalación predeterminada para todos los literales de cadena y variables locales del cuerpo del procedimiento.

    • MODIFICA DATOS SQL

      Se supone que un procedimiento modifica los datos SQL.

Ejemplos

-- 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!