sql - 如何在 JSON_EXISTS Oracle SQL Developer 中使用双引号传递参数
问题描述
我创建了一个表
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 路径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'
在passing
子句中成为:johnParam
您的应用程序。
要搜索属性等于特定值的文档,您可能会发现使用简单的点表示法更容易,或者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" }}
然后,您可以像查询非 JSON 数据一样替换为'john'
。:johnParam
推荐阅读
- java - 使用 android studio java Recycler 视图从 Firebase 实时数据库中删除节点
- c# - MediatR 定制行为管道
- java - 多变量函数的数值微分
- c++ - 构造实例的最佳实践
- javascript - 将 prop 从中间组件传递到 props.children
- c++ - 如何使用 gdb 在 vscode 中查看结构的非漂亮版本?
- javascript - 如何访问此 javascript 对象以进行动态 src 更新(plyr html5
- typescript - Typescript - 文字类型推断 - 与字符串和数字不同的行为
- selenium-webdriver - 从 xlsx 文件中获取数据时出现未找到文件异常
- mysql - 自定义 - ConstraintViolationException - SQL 异常