如何在SQL中匹配用户定义的数据类型

时间:2019-11-29 07:28:20

标签: sql oracle varray

我有一个用户定义的数据类型CRM_IDS

create or replace TYPE CRM_IDS AS VARRAY(10) OF VARCHAR(32);

在我的表purecov_summary中,列NAV_CRM_ID的数据类型为CRM_IDS

CREATE TABLE "PE_REG"."PURECOV_SUMMARY"
(
    ...
    "NAV_CRM_ID" "PE_REG"."CRM_IDS" ,
    ...
)

当我使用以下命令选择第一行的nav_crm_id时:

select nav_crm_id 
from purecov_summary 
where rownum = 1

我可以得到"PE_REG.CRM_IDS('10035005')"

但是当我跑步时:

select * 
from purecov_summary 
where nav_crm_id = PE_REG.CRM_IDS('10035005')

我收到此错误:

  

ORA-00932::数据类型不一致:预期-得到了PE_REG.CRM_IDS
  00932. 00000-“数据类型不一致:预期的%s得到了%s”
  *原因:
  *动作:
  行错误:1列:37

如何选择PE_REG.CRM_IDS类型?

1 个答案:

答案 0 :(得分:2)

技巧是将nav_crm_id关键字内的嵌套varray列(table)用作table(nav_crm_id)。因此,请考虑以下之一:

select p.* 
  from purecov_summary p 
 where exists (select column_value from table(p.nav_crm_id) where column_value = '10035005') 

select p.*
  from purecov_summary p
  join table(p.nav_crm_id) c
    on c.column_value = '10035005';

Demo