Синтаксические ошибки функции DB2 LUW-Json_Table - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь вставить массив данных 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 недействителен. Синтаксис Link 1 не поддерживается в DB2 LUW V11.1 / V11.5 ? Я что-то упустил?

Я только что взял образец кода из ссылки 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. "имя", U. "фамилия", U. "номер телефона" ИЗ EMPLOYEE_TABLE E JSON_TABLE (E.jsondo c, 'strict $' COLUMNS ("id" INTEGER, "firstname" VARCHAR (20) , "lastname" VARCHAR (20), "phoneno" VARCHAR (20)) ERROR ON ERROR) AS U

Я получаю такие ошибки маркеров, как: «Несколько маркеров в этой строке

  • DB2 для Linux, UNIX и Windows: " "должен был составить полную область.
  • DB2 для Linux, UNIX и Windows:« U. «id», U. «имя», U. «фамилия» , U. "номер телефона" ИЗ JSON_EMP E JSON_TABLE (E.EMP_DATA, 'strict $' COLUMNS ("id ..."

При попытке выполнить вышеуказанный запрос я получаю сообщение об ошибке "Неожиданный токен" E "был обнаружен после" er "FROM JSON_EMP ". Ожидаемые токены могут включать:" EXCEPT ".. SQLCODE = -104, SQLSTATE = 42601, DRIVER = 4.19.56"

Я попытался префикс JSON_TABLE с помощью схемы sysibm, но все равно не повезло. У меня такие же ошибки.

1 Ответ

1 голос
/ 13 июля 2020

В этом примере из документации есть ряд ошибок: - без запятой перед JSON_TABLE - противоречия в именах столбцов между предложением COLUMN и SELECT list

Ниже рабочий пример:

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