Oralce JSON_TRANSFORM,设置/插入/附加不起作用

问题描述 投票:0回答:1

为什么这样:

with j(jval) AS
(
select JSON_SERIALIZE('{"contract" :{"contract-type" : "P",
    "contract-id" : 123451,
    "proposal-no" : "123456",
    "serial-no" : "serialasd922",
    "product-code" : "s093",
    "contract-sign-dt" : "2016-12-01T00:00:00",
    "contract-start-dt" : "2016-12-09T00:00:00"
  }
}' pretty) from dual
)
SELECT   json_transform(jval, insert '$.contract[*].x' = '50' pretty)
FROM     j

不工作?我正在尝试在 $.contract 下插入新值。 设置丢失插入也不起作用,但是当涉及到更新现有字段时 - 一切都很好。

sql json oracle oracle19c
1个回答
0
投票

您正在尝试插入

'$.contract[*].x'
,但
contract
是一个对象而不是数组,因此
[*]
不应该在那里。

请使用

insert '$.contract.x' = 50
来代替。

with j(jval) AS
(
select JSON_SERIALIZE('{"contract" :{"contract-type" : "P",
    "contract-id" : 123451,
    "proposal-no" : "123456",
    "serial-no" : "serialasd922",
    "product-code" : "s093",
    "contract-sign-dt" : "2016-12-01T00:00:00",
    "contract-start-dt" : "2016-12-09T00:00:00"
  }
}' pretty) from dual
)
SELECT   json_transform(jval, insert '$.contract.x' = '50' pretty)
FROM     j
JSON_TRANSFORM(JVAL,INSERT'$.CONTRACT.X'='50'PRETTY)
{
  “合同”:
  {
    “合同类型”:“P”,
    “合同ID”:123451,
    “提案编号”:“123456”,
    “序列号”:“serialasd922” ,
    "产品代码":"s093",
    "合同签署-dt":"2016-12-01T00:00:00",
    "合同开始-dt":"2016-12-09T00:00 :00",
    "x":"50"
  }
}

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.