UNNEST 表格函數
UNNEST 函數會傳回結果表格,其中針對所指定陣列的每一個元素包含一列。 如果指定多個一般陣列引數,則列數將符合具有最大基數的陣列。
綱目是 SYSIBM。
- 陣列表示式
- 傳回陣列資料類型的表示式。 表示式必須是下列其中一個表示式:
- SQL 變數
- SQL 參數
- 廣域變數
- 函數呼叫
- 參數標記的 CAST 規格
- CASE 表示式
UNNEST 函數產生的結果直欄名稱可以作為 collection-derived-table 子句 correlation-clause 的一部分提供。
在支援陣列的環境定義中, UNNEST 函數只能在 collection-derived-table 子句中使用 (SQLSTATE 42887)。
結果表格取決於輸入引數。
- 如果指定傳回一般陣列的單一 array-expression :
- 如果陣列元素不是列資料類型,則結果是具有符合陣列元素資料類型之直欄資料類型的單一直欄表格。
- 如果陣列元素是列資料類型,則結果是元素資料類型中每一個列欄位有一個直欄的表格。 結果表格直欄資料類型符合對應的陣列元素列欄位資料類型。
- 如果指定多個一般陣列引數,且沒有任何陣列元素具有列資料類型,則第一個陣列會提供結果表格中的第一個直欄,第二個陣列會提供第二個直欄,依此類推。 每一個直欄的資料類型都符合對應陣列引數之陣列元素的資料類型。 如果陣列的基數不同,則產生的表格的基數與具有最大基數的陣列相同。 對於陣列索引值大於對應陣列的基數的所有列,表格中的直欄值會設為空值。 換句話說,如果將每一個陣列視為具有兩個直欄的表格,一個用於陣列索引,另一個用於資料,則 UNNEST 會在陣列之間執行 OUTER JOIN ,並使用陣列索引上的等式作為結合述詞。
- 如果指定傳回聯合陣列的單一 array-expression :
- 如果陣列元素不是列資料類型,則結果是具有 2 個直欄的表格,其中第一個直欄資料類型符合陣列索引資料類型,第二個直欄資料類型符合陣列元素資料類型。
- 如果陣列元素是列資料類型,則結果是具有比列資料類型中的欄位數多一欄的表格,其中第一個直欄資料類型符合陣列索引資料類型,其餘直欄資料類型符合陣列元素列欄位資料類型。
- 傳回錯誤 (SQLSTATE 42884):
- 如果指定多個聯合陣列引數。
- 如果指定多個陣列引數,且至少其中一個陣列具有屬於列類型的元素資料類型。
- 如果同時指定一般陣列引數和聯合陣列引數。
此特殊表格函數僅在 FROM 子句中 table-reference 的 collection-derived-table 中使用。
如果提供多個陣列,且至少有一個引數是聯合陣列,則會傳回錯誤 (SQLSTATE 42884)。
如果在取消巢狀內嵌聯合陣列時使用 WITH ORDINALITY 子句,則會傳回錯誤 (SQLSTATE 428HT)。
範例
- 假設陣列類型的一般陣列變數
RECENT_CALLSPHONENUMBERS只包含三個元素值 9055553907、4165554213 及 4085553678。下列 查詢:
傳回格式化如下的表格:SELECT T.ID, T.NUM FROM UNNEST(RECENT_CALLS) WITH ORDINALITY AS T(NUM, ID)ID NUM ---------- 1 9055553907 2 4165554213 3 4085553678 - 從陣列類型
PERSONAL_PHONENUMBERS的陣列變數PHONELIST中傳回個人電話號碼清單,以及索引字串值 下列 查詢:
傳回格式化如下的表格:SELECT T.ID, T.PHONE FROM UNNEST(PHONELIST) AS T(ID, PHONE)ID PHONE ---------------- Home 4163053745 Work 4163053746 Mom 4164789683
