Oracle 12c:尝试在Json查询结果

时间:2018-03-09 13:08:19

标签: json oracle

我在将JSON_QUERY结果的虚拟列创建到表中的JSON字段时遇到问题。有趣的是,我能够创建几个这样的列,但是其中一个很麻烦,使Oracle实例无法使用

JSON保存在名为PRODUCT的表中名为DESCRIPTION的列中,并包含一个如下所示的JSON对象:

{
   "id": 1,
   "name": "foo",
   "codes": ["A","B","C"],
   "packages": [
   {
     "number": "1234",
     "size": "small"
    },
    {
      "number": "5678",
      "size": "medium"
    }
   ]
 }

可以毫无问题地查询信息。 E.g。

 SELECT JSON_QUERY(DESCRIPTION, '$.codes') FROM PRODUCT

返回[[A“,”B“,”C“]和命令

 ALTER TABLE PRODUCT ADD (CODES VARCHAR2(500) GENERATED ALWAYS AS (JSON_QUERY(DESCRIPTION, '$.codes' RETURNING VARCHAR2(500))));

创建一个包含正确内容的列。

但是现在我的问题是:如果我对包号尝试相同的事情,那么创建虚拟列会破坏Oracle实例 - 不要在你关心的实例上尝试这个

查询数据完全正常:

SELECT JSON_QUERY(DESCRIPTION, '$.packages[*].number' WITH WRAPPER) FROM PRODUCT;

给了我[“1234”,“5678”]。但是试图创建一个虚拟列:

ALTER TABLE PRODUCT ADD (PACKAGE_NUMBERS VARCHAR2(500) GENERATED ALWAYS AS (JSON_QUERY(DESCRIPTION, '$.packages[*].number' WITH WRAPPER RETURNING VARCHAR2(500))));

返回我没有错误,一切看起来都很好,但是在这个命令之后我发送给数据库的每个SQL命令都回答:

Error: ORA-00907: missing right parenthesis
SQLState:  42000
ErrorCode: 907

我唯一可以做的就是抛弃实例并从头开始。

任何人都知道我做错了什么?

0 个答案:

没有答案