這很重要
這項功能目前處於 公開預覽版。
適用於:
是的 Databricks SQL 和 Databricks Runtime 17.0 及以上版本
是的,僅限 Unity Catalog
在 Unity 目錄中建立程式,以接受或修改自變數、執行一組 SQL 語句,以及選擇性地傳回結果集。
除了 位置參數調用之外,您也可以使用 具名參數調用來叫用程式。
語法
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 }
參數
或替換
如果指定,則會取代具有相同名稱的程式。 您無法使用程式取代現有的函式。 您無法使用
IF NOT EXISTS指定此參數。若不存在
如果指定,只有當具有該附注的程式不存在時,才會建立程式。 如果具有相同名稱的程式存在,則會忽略 語句。 您無法使用
OR REPLACE指定此參數。-
程序的名稱。 您可以選擇性地使用架構名稱來限定程式名稱。 如果名稱不合格,則會在目前的模式中建立永久程序。
程式名稱對於架構中的所有例程(程式和函式)而言都必須是唯一的。
procedure_parameter
指定程序的參數。
-
參數名稱在程式中必須是唯一的。
IN、 INOUT 或 OUT
選擇性地描述 參數的模式。
在
定義為僅供輸入的參數。 這是預設值。
INOUT
定義接受輸入輸出自變數的參數。 如果程式在沒有未處理的錯誤的情況下完成,則會將最終參數值當做輸出傳回。
出
定義輸出參數。 參數會初始化為
NULL,如果程式完成且沒有未處理的錯誤,則會將最終參數值當做輸出傳回。
-
任何支援的數據類型。
-
當函式調用未將自變數指派給 參數時,要使用的選擇性預設值。
default_expression必須可被轉換為。 表達式不得參考另一個參數或包含子查詢。當您指定一個參數的預設值時,下列所有參數也必須有預設值。
DEFAULT參數不支援OUT。 批註comment
參數的選擇性描述。
comment必須是STRING文字表達式。
-
-
具有 SQL 程式定義的 SQL 複合語句 (
BEGIN ... END)。當程序建立時會驗證語法的正確性。 在程序被叫用之前,不會驗證程序主體的語意正確性。
特徵
特性
SQL SECURITY INVOKER和LANGUAGE SQL必要。 所有其他專案都是選擇性的。 您可以依任何順序指定任意數目的特性,但只能指定每個子句一次。語言 SQL
函式實作的語言。
SQL 安全性調用程式
指定程式主體中的任何 SQL 語句都會在叫用程式的使用者授權下執行。
在解析程式主體內的關係和例程時,Azure Databricks 會在調用時使用目前的目錄和目前的架構。
不具決定性
程序被假定為非決定性,這表示它在每次調用時可能返回不同的結果,即使使用相同參數進行呼叫。
備註 procedure_comment
程序的批注。
procedure_comment必須是STRING常值。 預設值為NULL。預設排序規則 UTF8_BINARY
適用於:
Databricks SQL
Databricks Runtime 17.1 和更新版本強制程序的預設對照順序設定為
UTF8_BINARY。 如果建立過程的架構具有預設定序與UTF8_BINARY不同,則此子句是必要的。 程序的預設定序會用作程序參數的預設定序,以及程序內文中所有字串常值及局部變數的預設定序。修改 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 '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!