db2 - 未找到具有兼容参数的“FUNCTION”类型的名为“JSON_ARRAYAGG”的授权例程
问题描述
在 DB2 中使用 JSON_ARRAYAGG 函数时,未找到类型为“FUNCTION”的名为“JSON_ARRAYAGG”且具有兼容参数的授权例程:
QUERY:
SELECT JSON_OBJECT('ACCT_ID' VALUE acct_id,
'use_case list' VALUE
JSON_ARRAYAGG(
JSON_OBJECT('use_case' VALUE use_case,
'stage' VALUE stage)))
FROM NULLID.ProductRecommendations
GROUP BY acct_id;
Error:
FAILED [SELECT - 0 rows, 0.009 secs] 1) [Code: -440, SQL State: 42884] No authorized routine named "JSON_ARRAYAGG" of type "FUNCTION" having compatible arguments was found.. SQLCODE=-440, SQLSTATE=42884, DRIVER=4.26.14
2) [Code: -727, SQL State: 56098] An error occurred during implicit system action type "2". Information returned for the error includes SQLCODE "-440", SQLSTATE "42884" and message tokens "JSON_ARRAYAGG|FUNCTION".. SQLCODE=-727, SQLSTATE=56098, DRIVER=4.26.14
我已经在示例表上尝试过这个查询,仍然得到同样的错误:
Person Table:
create table NULLID.person
(
id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
name varchar(50),
PRIMARY KEY (id)
);
Contacts Table:
create table NULLID.contacts
(
id INT,
person_id int,
key varchar(50),
value varchar(100),
foreign key (person_id) references person (id)
);
Insert Queries:
insert into NULLID.person values (1, 'A');
insert into NULLID.person values (2, 'B');
insert into NULLID.contacts values (1, 1, 'EMAIL', 'a@b.com');
insert into NULLID.contacts values (2, 1, 'PHONE', '123');
insert into NULLID.contacts values (3, 2, 'EMAIL', 'b@b.com');
insert into NULLID.contacts values (4, 2, 'PHONE', '456');
Query:
SELECT
person_id,
JSON_ARRAYAGG(key)
FROM
contacts
GROUP BY person_id
Error:
16:17:44 FAILED [SELECT - 0 rows, 0.009 secs] 1) [Code: -440, SQL State: 42884] No authorized routine named "JSON_ARRAYAGG" of type "FUNCTION" having compatible arguments was found.. SQLCODE=-440, SQLSTATE=42884, DRIVER=4.26.14
2) [Code: -727, SQL State: 56098] An error occurred during implicit system action type "2". Information returned for the error includes SQLCODE "-440", SQLSTATE "42884" and message tokens "JSON_ARRAYAGG|FUNCTION".. SQLCODE=-727, SQLSTATE=56098, DRIVER=4.26.14
解决方案
请理解您必须使用正确的文档来匹配 Db2 产品平台。对于 Db2,有三个主要平台(Linux/Unix/Windows(LUW)、Z/OS 和 i 系列 (as/400)。此外,Db2-on-cloud 的功能(和不同的知识中心)与常规的本地 Db2-LUW。
您引用了 Db2-for-i (as/400) 的页面,该页面是与 Db2-on-cloud不同的产品(具有不同的 SQL 语法)。所以 Db2-on-cloud 不具备该功能json_arrayagg
(尽管当前版本的 Db2 for i 系列确实具备该功能)。
请使用此处的 Db2-on-cloud 正确知识中心
https://www.ibm.com/support/knowledgecenter/SSFMBX/com.ibm.swg.im.dashdb.kc.doc/welcome.html
对于云上的 Db2,语法是使用函数 JSON_ARRAY 和相关函数。您可以使用此查询来查看可用的 JSON 函数:(
select routinename from syscat.routines where routinename like 'JSON%'
假设您具有正确的访问权限)。
推荐阅读
- ios - 在 CollectionView Swift 上显示 Gif
- java - void 方法不能返回值 -Java
- reactjs - 是否可以为 Draft.js 创建演示数据?
- java - RecyclerView onBindViewHolder indexOutOfBounds 试图在 ArrayList 中绘制元素
- swift - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序。无法识别的选择器发送到实例
- azure - 从叶设备发送消息 未由在透明网关上运行的 IoT Edge 处理的下游设备
- python - TensorFlow 渴望没有 keras
- php - 用GD合并2张相同大小的图片
- css - CSS,左/右切换以转换/翻译以获得更好的性能
- powershell - 使用 TOM 处理 SSAS 表格模型时减少并行度