【问题标题】:DB2 LUW-Json_Table function Syntax errorsDB2 LUW-Json_Table 函数语法错误
【发布时间】:2020-07-13 16:28:19
【问题描述】:

我正在尝试将 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

我收到诸如“此行有多个标记”之类的标记错误

  • 适用于 Linux、UNIX 和 Windows 的 DB2:“”应该构成一个完整的范围。
  • 用于 Linux、UNIX 和 Windows 的 DB2:"U."id"、U."first name"、U."last name"、U."phone number" 来自 JSON_EMP E JSON_TABLE(E.EMP_DATA, '严格 $' COLUMNS("id..."

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

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

【问题讨论】:

  • 您使用的是什么 Db2 版本和平台?什么语句导致了错误?
  • 请在您的问题中发布您尝试过的确切代码。链接可能会失效,如果没有完整的上下文,问题将毫无意义,更不用说您复制和粘贴成功的证明,没有用错字转录等;-) 请还包括收到的完整错误,因为那个看起来它可能已经被删节了。
  • 对不起,我只是在描述中添加了额外的信息,其中包含我遇到的错误。

标签: db2-luw


【解决方案1】:

文档中的此示例中有许多错误:
-- JSON_TABLE前没有逗号
-- COLUMN 子句和SELECT 列表之间的列名矛盾

下面是一个工作示例:

/*
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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多