【发布时间】:2021-01-11 11:08:44
【问题描述】:
我已经创建了一个表
CREATE TABLE json_data(
json_col VARCHAR2(1000),
CONSTRAINT must_be_json CHECK (json_col IS JSON )
)
插入数据到表中
INSERT INTO json_data VALUES ('{ "abc" : { "fname" : "john" ,"lname" : "rambo" }}')
INSERT INTO json_data VALUES ('{ "abc" : { "fname" : "james" ,"lname" : "bond" }}')
需要使用以下查询选择值
SELECT json_col FROM json_data
WHERE JSON_EXISTS(json_col, '$.abc')
AND JSON_EXISTS(json_col,'$?(@.abc.name == "john")')
工作正常没有问题,但是我需要将值“John”作为参数传递..
SELECT json_col FROM json_data
WHERE JSON_EXISTS(json_col, '$.abc')
AND JSON_EXISTS(json_col,'$?(@.abc.name == :johnParam)'
:johnParam 是一个参数
它不作为参数,请帮助我如何用双引号传递:johnParam参数
【问题讨论】:
-
您真正的问题是如何在
JSON_EXISTS表达式中使用参数? -
是的,用双引号
-
数据中没有双引号,那么双引号和这个有什么关系呢?字符串值不包含其分隔符。 真正的 问题应该是您是否可以使用带有
JSON_EXISTS的参数。如果可以,您可以将整个表达式作为参数传递。 -
您首先假设您可以在字符串中传递参数。你不能。参数不是字符串替换变量,它们类似于 Java 函数参数。 也许您可以将整个表达式作为参数传递并编写
AND JSON_EXISTS(json_col,:someParam)但一些 SO 问题表明这也不可能 -
您可以使用PASSING clause 在JSON 路径表达式中包含一个外部值,例如
json_exists(po_document, '$.PONumber?(@ > $d)' PASSING 1500 AS "d")。或许你可以使用PASSING中的参数,例如PASSING :myParam AS "d")
标签: sql json oracle oracle-sqldeveloper