微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Oracle VARRAY集合中搜索值

如何解决在Oracle VARRAY集合中搜索值

我有一个Oracle表,该表的列类型为VARRAY Oracle集合类型。

create or replace
TYPE            FUSION_USER.FUSION_KEY_LIST AS VARRAY(20) OF VARCHAR2(80);

CREATE TABLE FUSION_QUEUE_AUDIT
  (
    "XML_ID"            NUMBER NOT NULL ENABLE,"XML_MESSAGE_TYPE"  NUMBER(4,0) NOT NULL ENABLE,"XML_MESSAGE"       SYS.XMLTYPE,"KEY_ID"            NUMBER,"KEY_LIST"          FUSION_USER.FUSION_KEY_LIST,"STATUS_IND"        VARCHAR2(1 BYTE) NOT NULL ENABLE
);

“ KEY_LIST”列中的数据存储为:

FUSION_USER.FUSION_KEY_LIST(1600458446,N)
FUSION_USER.FUSION_KEY_LIST(1600488742,N)
FUSION_USER.FUSION_KEY_LIST(1600481496,N)
FUSION_USER.FUSION_KEY_LIST(1600473344,N)

如何在此列中搜索值?以下查询将引发错误

select * from fusion_queue_audit where xml_message_type = 560 and create_date > (sysdate - 8/24) and INSTR(key_list,'1600103836') > 0;

OR

select * from fusion_queue_audit where xml_message_type = 560 and create_date > (sysdate - 8/24) and key_list like '%1600103836%';

预先感谢 R

解决方法

您可以将table应用于集合,以访问和过滤其内容,例如

select * from fusion_queue_audit
where xml_message_type = 560
  and create_date > (sysdate - 8/24)
  and exists (
    select 1 from table(key_list) t1
    where t1.column_value like '%1600103836%'
  );

检查fiddle上的测试示例

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。