Arrays Oracle如何在json数组列中查找包含某些值的行

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

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 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')
好的,谢谢您的解决方案和快速响应。它在我的用例中也很有用