首页 > 解决方案 > DB2 LUW-Json_Table 函数语法错误

问题描述

我正在尝试将 Json 数据数组插入 DB2 中的临时表中。我开始知道我可以使用 Json_Table 函数来实现这一点。我为这个函数找到了 2 个不同语法的链接。

有人可以帮助理解它们之间的区别吗?

  1. https://www.ibm.com/support/producthub/db2/docs/content/SSEPGG_11.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0070414.html?pos=2

  2. https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.swg.im.dbclient.json.doc/doc/r0070289.html

根据我的用例,我发现链接 1 是合适的,所以我在DB2 LUW V11.1/V11.5环境中尝试了该示例,我收到语法错误,说 JSON_Table 无效。DB2 LUW V11.1/V11.5是否不支持 Link 1 中的语法?我在这里错过了什么吗?

我只是从链接 1(https://www.ibm.com/support/producthub/db2/docs/content/SSEPGG_11.5.0/com.ibm.db2.luw.sql.ref.doc/ doc/r0070414.html?pos=2 ) 如下图

SELECT U."id", U."first name", U."last name", U."phone number"
FROM EMPLOYEE_TABLE E
JSON_TABLE(E.jsondoc, 'strict $'
           COLUMNS( "id" INTEGER,
                    "firstname"  VARCHAR(20),
                    "lastname"   VARCHAR(20),
                    "phoneno"    VARCHAR(20))
                    ERROR ON ERROR) AS U

我收到标记错误,例如“此行有多个标记

当我尝试执行上述查询时,我收到错误,因为“An‎ unexpected‎ token‎‎‎"E”‎ was‎‎ found‎ following‎ ‎“er”‎ ‎ FROM‎ JSON_EMP‎”。预期的标记可能包括:“EXCEPT‎”.. SQLCODE=-104、SQLSTATE=42601、DRIVER=4.19。 56"

我尝试使用模式 sysibm 作为 JSON_TABLE 的前缀,但仍然没有运气。我有同样的错误。

标签: db2-luw

解决方案


文档中的此示例中有许多错误:
-- 前面没有逗号--子句和列表JSON_TABLE
之间的列名冲突COLUMNSELECT

下面是一个工作示例:

/*
WITH EMPLOYEE_TABLE (jsondoc) AS 
(
VALUES 
'
{
  "id" : 901,
  "firstname" : "John",
  "lastname"  : "Doe",
  "phoneno"   : "555-3762"
}
'
)
*/
SELECT U."id", U."firstname", U."lastname", U."phoneno"
FROM 
  EMPLOYEE_TABLE E
, JSON_TABLE
(
  E.jsondoc, 'strict $' COLUMNS
  ( 
    "id" INTEGER
  , "firstname"  VARCHAR(20)
  , "lastname"   VARCHAR(20)
  , "phoneno"    VARCHAR(20)
  ) ERROR ON ERROR
) AS U;

推荐阅读