【问题标题】:Search a value in Oracle VARRAY collection在 Oracle VARRAY 集合中搜索值
【发布时间】:2020-11-04 16:14:51
【问题描述】:

我有一个 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%';

提前致谢 回复

【问题讨论】:

    标签: oracle collections varray


    【解决方案1】:

    您可以将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上的测试示例

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 2018-06-14
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 2020-02-04
      相关资源
      最近更新 更多