简体   繁体   English

如何在 JSON_EXISTS Oracle SQL 中使用双引号传递参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM