ARRAY_AGG

ARRAY_AGG 関数は、一連のエレメントを配列として集約します。

構文図を読む構文図をスキップする
>>-ARRAY_AGG--(--expression--+---------------------------------------------+--)-><
                             |           .-,-----------------------------. |      
                             |           V                      .-ASC--. | |      
                             '-ORDER BY----sort-key-expression--+------+-+-'      
                                                                '-DESC-'          

expression
CREATE TYPE (配列) ステートメントで指定できるデータ・タイプの値を返す式。
ORDER BY
集約で処理される、同じグループ化セットからの行の順序を指定します。ORDER BY 文節を指定しない場合、または ORDER BY 文節ではソート・キー値の順序を区別できない場合、同じグループ内の行は任意に順序付けられます。
sort-key-expression
列名または式のどちらかのソート・キー値を指定します。列または式のデータ・タイプは、DATALINK 値または XML 値であってはなりません。
集約したエレメントの順序付けは、ソート・キーの値に基づいて行われます。
ソート・キー式 の長さ属性の合計 は 3.5 ギガバイトを超えてはなりません。
ARRAY_AGG 関数を含むステートメントの実行時に *HEX 以外の照合順序が有効で、しかもソート・キー式 が SBCS データ、混合データ、または Unicode データの場合、結果は重み付けされた値の比較によって求められます。この重み付けされた値は、ソート・キー式 に照合順序を適用して得られます。
SQL プロシージャーまたは SQL 関数で ARRAY_AGG 関数を指定できるのは、以下の特定のコンテキストに限られます。
  • SELECT INTO ステートメントの select-clause
  • SET ステートメントの右側のスカラー副照会の select-clause

ARRAY_AGG を使用する SELECT に DISTINCT 文節を組み込むことはできません。

配列タイプと表を以下のように作成するとします。

CREATE TYPE PHONELIST AS DECIMAL(10,0) ARRAY[10]

CREATE TABLE EMPLOYEE (
    ID          INTEGER NOT NULL,
    PRIORITY    INTEGER NOT NULL,
    PHONENUMBER DECIMAL(10,0),
    PRIMARY KEY (ID, PRIORITY) )
SELECT INTO ステートメントを使用して従業員の連絡先の電話番号を優先順位に基づいて並べたリストを返すプロシージャーを作成します。
CREATE PROCEDURE GETPHONENUMBERS
    (IN EMPID INTEGER,
     OUT NUMBERS PHONELIST)
  BEGIN
    SELECT ARRAY_AGG(PHONENUMBER ORDER BY PRIORITY) INTO NUMBERS
        FROM EMPLOYEE
        WHERE ID = EMPID;
  END
SET ステートメントを使用して従業員の連絡先の電場番号を任意の順序で並べたリストを返すプロシージャーを作成します。
CREATE PROCEDURE GETPHONENUMBERS
    (IN EMPID INTEGER,
     OUT NUMBERS PHONELIST)
  BEGIN
    SET NUMBERS = 
      (SELECT ARRAY_AGG(PHONENUMBER)
        FROM EMPLOYEE
        WHERE ID = EMPID);
  END