1、函数名
array_agg() 返回一组基本元素,返回元素必须是create type(array)类型。
2、语法
>>-ARRAY_AGG--(--
expression
--+----------------------------------+-->
| .-,------------------. | | V .-ASC--. | | '-ORDER BY----sort-key--+------+-+-' '-DESC-' >--)-----------------------------------------------------------><
3、函数解释
array_agg函数返回一组基本元素。返回的数据类型必须是使用create type(array)类型的。数据中的元素的顺序有sql中指定的sort-key决定的。如果在sql中没有制定sort-key,那么在返回的数组中的元素的顺序是不确定的。但是即使在sql中没有指定sort-key,多次执同一sql返回的元素顺序是确定的。
如果在sql子查询中包含了array_agg函数,那么调用array_agg,listag,xmlagg,xmlgroup函数时必须制定同一个元素排序或者不制定排序的元素。
array_agg函数可以用在以下制定的sql存储过程中的上下文中:
- SELECT INTO 语句中
- 定义一个cursor使用的sql语句中,但是此cursor是不可滚动的
- 在set语句中右边,用sql语句查询定义个标量
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)) 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 CREATE PROCEDURE GETPHONENUMBERS (IN EMPID INTEGER, OUT NUMBERS PHONELIST) BEGIN SET NUMBERS = (SELECT ARRAY_AGG(PHONENUMBER) FROM EMPLOYEE WHERE ID = EMPID); END