[英]How to pass parameter with double quote inside JSON_EXISTS Oracle SQL Developer
I have created a table我创建了一个表
CREATE TABLE json_data(
json_col VARCHAR2(1000),
CONSTRAINT must_be_json CHECK (json_col IS JSON )
)
Inserted Data into table插入数据到表中
INSERT INTO json_data VALUES ('{ "abc" : { "fname" : "john" ,"lname" : "rambo" }}')
INSERT INTO json_data VALUES ('{ "abc" : { "fname" : "james" ,"lname" : "bond" }}')
Need to select value using below query需要使用以下查询 select 值
SELECT json_col FROM json_data
WHERE JSON_EXISTS(json_col, '$.abc')
AND JSON_EXISTS(json_col,'$?(@.abc.name == "john")')
works fine without problem, however I need to pass value "John" as parameter like..可以正常工作,但是我需要将值“John”作为参数传递,例如..
SELECT json_col FROM json_data
WHERE JSON_EXISTS(json_col, '$.abc')
AND JSON_EXISTS(json_col,'$?(@.abc.name == :johnParam)'
where :johnParam
is a parameter其中
:johnParam
是一个参数
its not taking as parameter, please help me how to pass :johnParam
parameter with double quotes它不作为参数,请帮助我如何使用双引号传递
:johnParam
参数
If you want to pass a variable to a JSON path in json_exists
, use the passing
clause:如果要将变量传递给 json_exists 中的
json_exists
路径,请使用passing
子句:
create table json_data (
json_col varchar2(1000)
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.fname == $johnparam)'
passing 'john' as "johnparam"
);
JSON_COL
{ "abc" : { "fname" : "john" ,"lname" : "rambo" }}
'john'
in the passing
clause becomes :johnParam
in your application. passing
子句中的'john'
在您的应用程序中变为:johnParam
。
To search for documents where an attribute equals a specific value, you may find it easier to use simple dot-notation or json_value
instead:要搜索属性等于特定值的文档,您可能会发现使用简单的点表示法或
json_value
更容易:
select * from json_data j
where j.json_col.abc.fname = 'john';
JSON_COL
{ "abc" : { "fname" : "john" ,"lname" : "rambo" }}
select * from json_data j
where json_value ( json_col, '$.abc.fname' ) = 'john';
JSON_COL
{ "abc" : { "fname" : "john" ,"lname" : "rambo" }}
Then you can replace 'john'
with :johnParam
as you would for queries against non-JSON data.然后,您可以将
'john'
替换为:johnParam
,就像查询非 JSON 数据一样。
You can use substitution parameter with ampersand such as &name
with the following query您可以将替换参数与&符号一起使用,例如
&name
与以下查询
SELECT json_col
FROM json_data
WHERE JSON_EXISTS(json_col, '$.abc?(@.fname == "&name")')
where the part JSON_EXISTS(json_col, '$.abc')
seems redundant. JSON_EXISTS(json_col, '$.abc')
部分似乎是多余的。 When prompted, enter john
without quotes as value for $name
.出现提示时,输入不带引号的
john
作为$name
的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.