Delen via


Aanmaken van procedure

Belangrijk

Deze functie bevindt zich in openbare preview-versie.

Van toepassing op:aangevinkt ja Databricks SQL Databricks Runtime 17.0 en hoger aangevinkt ja alleen Unity Catalog

Hiermee maakt u een procedure in Unity Catalog die argumenten gebruikt of wijzigt, een set SQL-instructies uitvoert en eventueel een resultatenset retourneert.

Naast positionele parameteraanroepen kunt u ook procedures aanroepen met behulp van benoemde parameteraanroepen.

Syntaxis

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 }

Parameterwaarden

  • OF VERVANGEN

    Indien opgegeven, wordt een procedure met dezelfde naam vervangen. U kunt een bestaande functie niet vervangen door een procedure. U kunt deze parameter niet opgeven met IF NOT EXISTS.

  • ALS NIET BESTAAT

    Indien opgegeven, wordt de procedure alleen gemaakt wanneer er nog geen procedure met die specifieke opmerking bestaat. Als er een procedure met dezelfde naam bestaat, wordt de statement genegeerd. U kunt deze parameter niet opgeven met OR REPLACE.

  • procedure_name

    Een naam voor de procedure. U kunt desgewenst de naam van de procedure kwalificeren met een schemanaam. Als de naam niet is gekwalificeerd, wordt de permanente procedure gemaakt in het huidige schema.

    De naam van de procedure moet uniek zijn voor alle routines (procedures en functies) in het schema.

  • procedure_parameter

    Hiermee geeft u een parameter van de procedure.

    • parameter_name

      De parameternaam moet uniek zijn binnen de procedure.

    • IN, INOUT of OUT

      Beschrijft eventueel de modus van de parameter.

      • IN

        Hiermee definieert u een invoerparameter die alleen als invoer dient. Dit is de standaardwaarde.

      • INOUT

        Hiermee definieert u een parameter die een invoer-uitvoerargument accepteert. Als de procedure is voltooid zonder een niet-verwerkte fout, wordt de uiteindelijke parameterwaarde als uitvoer geretourneerd.

      • BUITEN

        Hiermee definieert u een uitvoerparameter. De parameter wordt geïnitialiseerd met NULL en, als de procedure zonder een niet-verwerkte fout wordt voltooid, zal de uiteindelijke parameterwaarde als uitvoer worden geretourneerd.

    • data_type

      Elk ondersteund gegevenstype.

    • STANDAARD default_expression

      Een optionele standaardwaarde die moet worden gebruikt wanneer een functieaanroep geen argument toewijst aan de parameter. default_expression moet worden gegoten naar data_type. De expressie mag niet verwijzen naar een andere parameter of een subquery bevatten.

      Wanneer u een standaardwaarde voor één parameter opgeeft, moeten alle volgende parameters ook een standaardwaarde hebben.

      DEFAULT wordt niet ondersteund voor OUT parameters.

    • OPMERKING opmerking

      Een optionele beschrijving van de parameter. comment moet een STRING letterlijke waarde zijn.

  • samengestelde_verklaring

    Een samengestelde SQL-instructie (BEGIN ... END) met de definitie van de SQL-procedure.

    Wanneer de procedure wordt aangemaakt, wordt de syntactische juistheid gevalideerd. De hoofdtekst van de procedure wordt pas gevalideerd op semantische juistheid als de procedure wordt aangeroepen.

  • karakteristiek

    Het kenmerk SQL SECURITY INVOKER en LANGUAGE SQL zijn vereist. Alle andere zijn optioneel. U kunt in elke volgorde een willekeurig aantal kenmerken opgeven, maar u kunt elke component slechts één keer opgeven.

    • LANGUAGE SQL

      De taal van de functie-implementatie.

    • SQL SECURITY INVOKER

      Hiermee geeft u op dat sql-instructies in de hoofdtekst van de procedure worden uitgevoerd onder de autoriteit van de gebruiker die de procedure aanroept.

      Bij het oplossen van relaties en routines binnen de hoofdtekst van de procedure gebruikt Azure Databricks de huidige catalogus en het huidige schema op het moment van aanroepen.

    • NIET DETERMINISTISCH

      Een procedure wordt verondersteld niet-deterministisch, wat betekent dat deze verschillende resultaten kan retourneren bij elke aanroep, zelfs wanneer deze wordt aangeroepen met dezelfde argumenten.

    • OPMERKING procedure_comment

      Een opmerking voor de procedure. procedure_comment moet letterlijk zijn STRING . De standaardwaarde is NULL.

    • STANDAARD COLLATIE UTF8_BINARY

      Van toepassing op:controleren gemarkeerd ja Databricks SQL-controle gemarkeerd als ja Databricks Runtime 17.1 en hoger

      Dwingt de standaard collatie van de procedure af naar UTF8_BINARY. Deze component is verplicht als het schema waarin de procedure wordt gemaakt, een andere standaardsortering heeft dan UTF8_BINARY. De standaardsortering van de procedure wordt gebruikt als de standaardsortering voor procedureparameters en de standaardsortering voor alle letterlijke tekenreeksen en lokale variabelen in de hoofdtekst van de procedure.

    • WIJZIGT SQL-GEGEVENS

      Er wordt uitgegaan van een procedure om SQL-gegevens te wijzigen.

Voorbeelden

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