Condividi tramite


CREA PROCEDURA

Importante

Questa funzionalità è in Anteprima Pubblica.

Si applica a:verificato sì Databricks SQL Databricks Runtime 17.0 e versioni successive verificato sì solo catalogo Unity

Crea una routine in Unity Catalog che accetta o modifica gli argomenti, esegue un set di istruzioni SQL e, facoltativamente, restituisce un set di risultati.

Oltre alla chiamata al parametro posizionale, è anche possibile richiamare le routine usando la chiamata al parametro denominato.

Sintassi

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 }

Parametri

  • O SOSTITUISCI

    Se specificato, viene sostituita una procedura con lo stesso nome. Non è possibile sostituire una funzione esistente con una routine. Non è possibile specificare questo parametro con IF NOT EXISTS.

  • SE NON ESISTE

    Se viene specificato, crea la procedura solo quando non esiste già una procedura con tale nota. Se esiste una routine con lo stesso nome, l'istruzione viene ignorata. Non è possibile specificare questo parametro con OR REPLACE.

  • procedure_name

    Nome della procedura. Facoltativamente, è possibile qualificare il nome della routine con un nome di schema. Se il nome non è qualificato, la procedura permanente viene creata nello schema corrente.

    Il nome della routine deve essere univoco per tutte le routine (routine e funzioni) nello schema.

  • procedure_parameter

    Specifica un parametro della routine.

    • parameter_name

      Il nome del parametro deve essere univoco all'interno della routine.

    • IN, INOUT o OUT

      Facoltativamente, descrive la modalità del parametro .

      • IN

        Definisce un parametro di solo input. Si tratta dell'impostazione predefinita.

      • INOUT

        Definisce un parametro che accetta un argomento di input-output. Se la procedura viene completata senza un errore non gestito, restituisce il valore finale del parametro come output.

      • USCITA

        Definisce un parametro di output. Il parametro viene inizializzato in NULL e, se la procedura viene completata senza un errore non gestito, restituisce il valore finale del parametro come output.

    • tipo_dati

      Qualsiasi tipo di dati supportato.

    • DEFAULT default_expression

      Valore predefinito facoltativo da utilizzare quando una chiamata di funzione non assegna un argomento al parametro . default_expression deve essere convertibile a data_type. L'espressione non deve fare riferimento a un altro parametro o contenere una sottoquery.

      Quando si specifica un valore predefinito per un parametro, anche tutti i parametri seguenti devono avere un valore predefinito.

      DEFAULT non è supportato per parametri OUT.

    • Commento osservazione

      Descrizione facoltativa del parametro. comment deve essere un valore STRING letterale.

  • compound_statement

    Istruzione composta SQL (BEGIN ... END) con la definizione della routine SQL.

    Quando la procedura viene creata, viene convalidata la correttezza sintattica. Il corpo della routine non viene convalidato per la correttezza semantica fino a quando non viene richiamata la routine.

  • caratteristica

    La caratteristica SQL SECURITY INVOKER e LANGUAGE SQL sono richieste. Tutti gli altri sono facoltativi. È possibile specificare qualsiasi numero di caratteristiche in qualsiasi ordine, ma è possibile specificare ogni clausola una sola volta.

    • LINGUAGGIO SQL

      Linguaggio dell'implementazione della funzione.

    • SQL SECURITY INVOKER

      Specifica che tutte le istruzioni SQL nel corpo della procedura verranno eseguite sotto l'autorità dell'utente che richiama la procedura.

      Durante la risoluzione delle relazioni e delle routine all'interno del corpo della procedura, Azure Databricks usa il catalogo corrente e lo schema corrente al momento della chiamata.

    • NON DETERMINISTICA

      Si presuppone che una routine non deterministica, vale a dire che può restituire risultati diversi per ogni chiamata, anche quando viene chiamata con gli stessi argomenti.

    • COMMENTO procedure_comment

      Un commento per la procedura. procedure_comment deve essere STRING letterale. Il valore predefinito è NULL.

    • COLLAZIONE PREDEFINITA UTF8_BINARY

      Si applica a:check contrassegnato come sì controllo SQL di Databricks contrassegnato come sì Databricks Runtime 17.1 e versioni successive

      Forza le regole di confronto predefinite della routine su UTF8_BINARY. Questa clausola è obbligatoria se lo schema in cui viene creata la routine ha regole di confronto predefinite diverse da UTF8_BINARY. Le regole di confronto predefinite della routine vengono utilizzate come regole di confronto predefinite per i parametri della routine e le regole di confronto predefinite per tutti i valori letterali stringa e le variabili locali nel corpo della routine.

    • MODIFICA I DATI SQL

      Si presuppone che una procedura modifichi i dati SQL.

Esempi

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