這很重要
這項功能目前處於 公開預覽版。
適用於:
Databricks SQL
Databricks Runtime 17.0 及以上版本
依名稱叫用預存程序,並在程序中傳遞參數。
"過程呼叫最多可以巢狀化為 64 個層級。"
備註
ODBC 不支援 CALL 陳述。
語法
CALL procedure_name( [ argument [, …] ]
[ namedParameter => argument ] [, ...] )
參數
-
要叫用之程序的名稱。 程式名稱可能選擇性地以架構名稱限定。 如果名稱不合格,則程式會在目前的架構中解析。 如果程式不存在,就會
ROUTINE_NOT_FOUND引發錯誤。 -
針對指派給
IN參數的引數,可以是任何能夠轉換成該參數的型別之表達式,或使用DEFAULT關鍵詞。 針對OUT和INOUT參數,自變數必須是會話變數或局部變數。如果程序失敗,和
OUT參數的INOUT自變數值會保持不變。備註
參數必須與參數的資料型態相符。 這包括,例如將
DATE'2015-01-01'指定為參數,而不是使用'2015-01-01'後者作為DATE參數。 -
被指派
argExpr之參數的未限定名稱。
自變數的數目不得大於為程式指定的參數數目。
如果您指定的自變數比有參數少,則必須使用 DEFAULT 值來定義參數。
範例
> CREATE OR REPLACE PROCEDURE area_of_rectangle
(IN x INT, IN y INT, OUT area INT, INOUT acc INT)
LANGUAGE SQL
SQL SECURITY INVOKER
AS BEGIN
SET area = x * y;
SET acc = acc + area;
SELECT 'Area of rectangle is: ' || area;
END;
-- Session varables to handle OUT and INOUT parameters
> DECLARE area INT;
> DECLARE acc INT DEFAULT 10;
-- Invocation by position
> CALL area_of_rectangle(5, 10, area, acc);
Area of rectangle is: 50
> SELECT area, acc;
area acc
—--- —--
50 60
-- Invocation by name
> CALL area_of_rectangle(y => 10, x => 5, area => area, acc => acc);
Area of rectangle is: 50
> SELECT area, acc;
area acc
—--- —--
50 120