適用於:
Databricks SQL
Databricks Runtime 16.3 和以上版本
重要
這項功能目前處於 公開預覽版。
您可以使用 SQL/PSM 標準型腳本語法來運用功能強大的程式邏輯。
任何 SQL 腳本都由 複合語句 區塊(BEGIN ... END)組成且開始於。
複合語句會從 區段開始,以宣告局部變數、使用者定義條件和條件處理程式,用來攔截例外狀況。
後面接著複合語句主體,其中包含:
- 流程控制語句包括對述詞表達式的迴圈、針對查詢結果 FOR 迴圈、條件式邏輯,例如 IF 和 CASE,以及分流迴圈的方法,例如 LEAVE 和 ITERATE。
- DDL 語句,例如
ALTER、CREATE、DROP。 - DCL (資料控制) 語句,例如 GRANT 和 REVOKE。
- DML 語句 INSERT、UPDATE、DELETE和 MERGE。
- 查詢,將結果集傳回至腳本的叫用者。
- SET 語句可以用來設定局部變數和會話變數。
- EXECUTE IMMEDIATE 敘述。
- 巢狀複合語句,可為變數、條件和條件處理程式提供巢狀範圍。
在叫用者與複合語句之間傳遞數據
有兩種方式可將數據傳入 SQL 腳本,以及從中傳遞數據:
- 使用會話變數在一個SQL腳本與另一個SQL腳本之間傳遞純量值或小型陣列或映射集合。
- 使用參數標記,將純量值或小型陣列集或映射數據從筆記本元件、Python 或其他語言傳遞至 SQL 腳本。
變數範圍
複合語句內宣告的變數可以在複合語句內的任何表達式中參考。 Databricks 會依照 名稱解析中所述的規則,從最內層的範圍向外解析標識符。 您可以使用選擇性複合語句 標籤 來釐清重複 變數名稱。
條件處理
SQL 腳本支援條件處理程式,用來攔截和處理例外狀況,以便於 EXIT SQL 腳本的處理。
在條件處理程式中,您可以 RESIGNAL 原始例外狀況、SIGNAL 新的例外狀況,或結束複合語句而不例外狀況。
條件處理程式可以定義為處理三個不同的條件類別:
一或多個具名條件,可以是特定 Databricks 定義的錯誤類別,例如
DIVIDE_BY_ZERO或使用者宣告的條件。 這些處理程式會處理這些特定條件。一或多個
SQLSTATE,可由 Databricks 或使用者SIGNAL語句引發。 這些處理程式可以處理與該SQLSTATE相關聯的任何條件。泛型
SQLEXCEPTION處理程式可以捕捉掉入SQLEXCEPTION的所有條件(任何不是SQLSTATE且不是XX***的02***)。
下列是用來決定哪一個條件處理程式適用於例外狀況。 這個條件處理程式稱為 最適當的處理程式:
條件處理程式不能套用至在其本身主體中定義的任何語句,或是相同複合語句中宣告的任何條件處理程序主體。
在引發例外狀況的最內層複合語句中定義的適用條件處理程式是適當的。
如果有多個適當的處理程式可用,最特定的處理程式是最適當的處理程式。 例如,具名條件上的處理程式比具名
SQLSTATE上的處理程式更具體。 泛型EXCEPTION處理程式是最不特定的。
除非處理程式 SIGNAL或 RESIGNAL定義了自己的條件,否則條件處理程式的結果是執行宣告該處理程式的複合語句之後的語句。
SQL 預存程式
重要
這項功能目前處於 公開預覽版。
適用於:
Databricks SQL
Databricks 運行時 17.0 及以上
您可以使用 CREATE PROCEDURE 語句,在 Unity 目錄中保存 SQL 腳本。 接著,您可以將該程序的存取權授予其他主體。 然後,這些主體可以使用 CALL 語句來叫用程式。
控制流程語句清單
以下是支援的控制流程語句清單:
- CASE 語句
- BEGIN END 複合陳述
- FOR 語句
- GET 診斷語句
- IF THEN ELSE 條件語句
- ITERATE 語句
- LEAVE 語句
- LOOP 語句
- REPEAT 語法
- RESIGNAL 語句
- SIGNAL 語句
- WHILE 語句