0

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

4

1 回答 1

0

您可以应用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%'
  );

检查小提琴上的测试示例

于 2020-11-04T16:52:14.127 回答