Partager via


CRÉER PROCÉDURE

Importante

Cette fonctionnalité est disponible en préversion publique.

S'applique à :coche oui Databricks SQL Databricks Runtime 17.0 et versions ultérieures coche oui uniquement pour le catalogue Unity

Crée une procédure dans Le catalogue Unity qui accepte ou modifie des arguments, exécute un ensemble d’instructions SQL et retourne éventuellement un jeu de résultats.

Outre l’appel de paramètre positionnel, vous pouvez également appeler des procédures à l’aide d’un appel de paramètre nommé.

Syntaxe

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 }

Paramètres

  • OU REMPLACER

    Si elle est spécifiée, une procédure portant le même nom est remplacée. Vous ne pouvez pas remplacer une fonction existante par une procédure. Vous ne pouvez pas spécifier ce paramètre avec IF NOT EXISTS.

  • SI N'EXISTE PAS

    Si elle est spécifiée, crée la procédure uniquement lorsqu’une procédure avec cette note n’existe pas déjà. Si une procédure portant le même nom existe, l’instruction est ignorée. Vous ne pouvez pas spécifier ce paramètre avec OR REPLACE.

  • procedure_name

    Nom de la procédure. Vous pouvez éventuellement qualifier le nom de la procédure avec un nom de schéma. Si le nom n’est pas qualifié, la procédure permanente est créée dans le schéma actuel.

    Le nom de la procédure doit être unique pour toutes les routines (procédures et fonctions) dans le schéma.

  • procedure_parameter

    Spécifie un paramètre de la procédure.

    • parameter_name

      Le nom du paramètre doit être unique dans la procédure.

    • IN, INOUT ou OUT

      Décrit éventuellement le mode du paramètre.

      • IN

        Définit un paramètre d’entrée uniquement. Il s’agit de la valeur par défaut.

      • INOUT

        Définit un paramètre qui accepte un argument d’entrée-sortie. Si la procédure se termine sans erreur non gérée, elle retourne la valeur finale du paramètre en tant que sortie.

      • DEHORS

        Définit un paramètre de sortie. Le paramètre est initialisé NULL et, si la procédure se termine sans erreur non gérée, elle retourne la valeur finale du paramètre en tant que sortie.

    • type_de_données

      Tout type de données pris en charge.

    • DEFAULT default_expression

      Valeur par défaut facultative à utiliser lorsqu’un appel de fonction n’affecte pas d’argument au paramètre. default_expression doit être convertible en une valeur de type data_type. L’expression ne doit pas faire référence à un autre paramètre ou contenir une sous-requête.

      Lorsque vous spécifiez une valeur par défaut pour un paramètre, tous les paramètres suivants doivent également avoir une valeur par défaut.

      DEFAULT n’est pas pris en charge pour les OUT paramètres.

    • COMMENT comment

      Description optionnelle du paramètre. comment doit être un littéral STRING.

  • compound_statement

    Instruction composée SQL (BEGIN ... END) avec la définition de la procédure SQL.

    Lorsque la procédure est créée, la correction syntaxique est validée. Le corps de la procédure n’est pas validé pour la correction sémantique tant que la procédure n’est pas appelée.

  • caractéristique

    Caractéristique SQL SECURITY INVOKER et LANGUAGE SQL obligatoire. Tous les autres sont facultatifs. Vous pouvez spécifier n’importe quel nombre de caractéristiques dans n’importe quel ordre, mais vous ne pouvez spécifier chaque clause qu’une seule fois.

    • LANGUAGE SQL

      Langage de l’implémentation de la fonction.

    • SQL SECURITY INVOKER

      Spécifie que toutes les instructions SQL dans le corps de la procédure seront exécutées sous l’autorité de l’utilisateur appelant la procédure.

      Lors de la résolution des relations et des routines dans le corps de la procédure, Azure Databricks utilise le catalogue actuel et le schéma actuel au moment de l’appel.

    • NON DÉTERMINISTE

      Une procédure est supposée non déterministe, ce qui signifie qu’elle peut retourner des résultats différents sur chaque appel, même lorsqu’elle est appelée avec les mêmes arguments.

    • COMMENTAIRE procedure_comment

      Commentaire de la procédure. procedure_comment doit être STRING littéral. La valeur par défaut est NULL.

    • COLLATION PAR DÉFAUT UTF8_BINARY

      S’applique à :check marqué oui Databricks SQL vérifié marqué oui Databricks Runtime 17.1 et versions ultérieures

      Force le classement par défaut de la procédure à UTF8_BINARY. Cette clause est obligatoire si le schéma dans lequel la procédure est créée a un classement par défaut autre que UTF8_BINARY. Le classement par défaut de la procédure est utilisé comme classement par défaut pour les paramètres de procédure et le classement par défaut pour tous les littéraux de chaîne et variables locales dans le corps de la procédure.

    • MODIFIE LES DONNÉES SQL

      Une procédure est supposée modifier les données SQL.

Exemples

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