Arrays Oracle如何在json数组列中查找包含某些值的行
Oracle我想从json数组列视图角色的值为1的表中筛选行。解决方案可能仅在where子句中,也可能使用join。我已经花了3天的时间来解决这个问题,请告诉我我做错了什么Arrays Oracle如何在json数组列中查找包含某些值的行,arrays,json,oracle,Arrays,Json,Oracle,Oracle我想从json数组列视图角色的值为1的表中筛选行。解决方案可能仅在where子句中,也可能使用join。我已经花了3天的时间来解决这个问题,请告诉我我做错了什么 CREATE TABLE test_fields ( field_id NUMBER NOT NULL, field_name VARCHAR2(100), view_role VARCHAR2(1000) CHECK (view_role IS JSON) ); INSERT
CREATE TABLE test_fields
(
field_id NUMBER NOT NULL,
field_name VARCHAR2(100),
view_role VARCHAR2(1000) CHECK (view_role IS JSON)
);
INSERT INTO test_fields VALUES(1, 'StaffName', '[1,10,50,100]');
INSERT INTO test_fields VALUES(2, 'Salary', '[50,100]');
INSERT INTO test_fields VALUES(2, 'Email', '[10,50,100]');
commit;
SELECT * FROM TEST_FIELDS;
-- I want to find fields for role 1;
SELECT f.field_id, f.field_name
jt.role
FROM TEST_FIELDS f,
json_table(f.view_role[*]
COLUMNS ("ROLE" VARCHAR2(20) PATH '$')) jt
WHERE jt.role = 1;
您使用的
JSON_表
不正确。第一个参数是要转换为表的JSON值,第二个参数是用于查找所需信息的JSON选择器的定义
此查询应为您提供所需信息:
选择*
从test_字段,JSON_表(查看_角色“$[*]”列(角色编号路径“$”)jt
其中jt.role=1;
非常感谢,我希望它解决了我的问题。我还有一个请求,你能告诉我在哪里条件不连接JSON_表可能使用JSON_exist在JSON数组中不可能使用JSON_查找特定值,但是如果你想使用这样的查询SELECT*FROM test_字段,其中REGEXP_类似(view_role,'\D1\d')
好的,谢谢您的解决方案和快速响应。它在我的用例中也很有用