次の方法で共有


手順の作成

Von Bedeutung

この機能は パブリック プレビュー段階です

適用対象: :Databricks Runtime 17.0 以降 のチェックははい Unity カタログのみとマークされています

引数を受け取るか変更し、SQL ステートメントのセットを実行し、必要に応じて結果セットを返すプロシージャを Unity Catalog に作成します。

位置指定パラメーターの呼び出しに加えて、名前付きパラメーター呼び出しを使用してプロシージャを呼び出すこともできます。

構文

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 |
    MODIFIES SQL DATA ] }

パラメーター

  • または置換する

    指定した場合、同じ名前のプロシージャが置き換えられます。 既存の関数をプロシージャに置き換えることはできません。 IF NOT EXISTS と一緒にこのパラメーターを指定することはできません。

  • 存在しない場合

    指定した場合は、そのメモを持つプロシージャがまだ存在しない場合にのみ、プロシージャを作成します。 同じ名前のプロシージャが存在する場合、ステートメントは無視されます。 OR REPLACE と一緒にこのパラメーターを指定することはできません。

  • procedure_name

    プロシージャの名前。 必要に応じて、プロシージャ名をスキーマ名で修飾できます。 名前が修飾されていない場合は、永続的なプロシージャが現在のスキーマに作成されます。

    プロシージャ名は、スキーマ内のすべてのルーチン (プロシージャと関数) に対して一意である必要があります。

  • procedure_parameter

    プロシージャのパラメーターを指定します。

    • parameter_name

      パラメーター名は、プロシージャ内で一意である必要があります。

    • ININOUT、または OUT

      必要に応じて、パラメーターのモードを記述します。

      • 入力のみのパラメーターを定義します。 これが既定値です。

      • INOUT

        入力/出力引数を受け取るパラメーターを定義します。 プロシージャが未処理のエラーなしで完了すると、最終的なパラメーター値が出力として返されます。

      • アウト

        出力パラメーターを定義します。 パラメーターは NULL に初期化され、プロシージャが未処理のエラーなしで完了すると、最終的なパラメーター値が出力として返されます。

    • データ型

      サポートされるすべてのデータ型。

    • DEFAULT default_expression

      関数呼び出しでパラメーターに引数が割り当てられない場合に使用される省略可能な既定値。 default_expressiondata_typeでなければなりません。 この式は、別のパラメーターを参照したり、サブクエリを含めたりすることはできません。

      あるパラメーターに既定値を指定すると、以降のすべてのパラメーターにも既定値が必要になります。

      DEFAULT は、 OUT パラメーターではサポートされていません。

    • COMMENT コメント

      パラメーターの説明 (省略可能)。 comment は、STRING リテラルにする必要があります。

  • 複合文

    SQL プロシージャの定義を含む SQL 複合ステートメント (BEGIN ... END)。

    プロシージャが作成されると、構文の正確性が検証されます。 プロシージャ本体は、プロシージャが呼び出されるまでセマンティックの正確性を検証しません。

  • 特性

    特性 SQL SECURITY INVOKERLANGUAGE SQL が必要です。 その他はすべて省略可能です。 任意の順序で任意の数の特性を指定できますが、各句は 1 回だけ指定できます。

    • LANGUAGE SQL

      関数実装の言語。

    • SQL SECURITY INVOKER

      プロシージャーの本体内のすべての SQL ステートメントを、プロシージャーを呼び出すユーザーの権限の下で実行することを指定します。

      プロシージャの本体内でリレーションとルーチンを解決する場合、Azure Databricks では、呼び出し時に現在のカタログと現在のスキーマが使用されます。

    • 非決定性

      プロシージャは非決定的であると見なされます。つまり、同じ引数で呼び出された場合でも、呼び出しごとに異なる結果を返すことができます。

    • コメント procedure_comment

      手順に対するコメント。 procedure_commentSTRING リテラルである必要があります。 既定値は NULLです。

    • SQL データを変更します

      プロシージャは SQL データを変更することを前提としています。

例示

-- 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 'forma' THEN SELECT 'Pleased to meet you.';
        END CASE;
    END;
> CALL greeting('informal');
  Hi!

> CALL greeting('formal');
  Pleased to meet you.

> CALL greeting('casual');
  Hello!