Oracle ORA-000932将xmltype连接到varchar字段时
有一点背景知识,我在数据库中有一个逗号分隔的列,我试图将其转换为多对多连接表,因此Oracle ORA-000932将xmltype连接到varchar字段时,oracle,tsql,join,oracle11g,xmltype,Oracle,Tsql,Join,Oracle11g,Xmltype,有一点背景知识,我在数据库中有一个逗号分隔的列,我试图将其转换为多对多连接表,因此 ID REPORT 1 5,6,7 我会明白的 ID REPORT 1 5 1 6 1 7 下面的查询就是这样做的,而且似乎工作正常 with t as (select id,hqcat from report) SELECT id, EXTRACT(column_value,'/e/text()') hqcat from t x, TABLE(XMLSEQUENCE(EXTRACT(
ID REPORT
1 5,6,7
我会明白的
ID REPORT
1 5
1 6
1 7
下面的查询就是这样做的,而且似乎工作正常
with t as (select id,hqcat from report)
SELECT id, EXTRACT(column_value,'/e/text()') hqcat from t x,
TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<ROW><e>'||REPLACE(hqcat,',','</e><e>')||'</e></ROW>'),'//e')))
然而,当我试图通过hqcat将其连接到我的查找表时,我得到一个关于非恒定数据类型的ORA-00932错误,请帮助我,如何更改原始查询以使其与其他表和连接一起工作
以下是导致错误的联接:
select *
from BIN03 a11
join ( with t as (select id,hqcat from report)
SELECT id, EXTRACT(column_value,'/e/text()') hqcat from t x,
TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<ROW><e>'||REPLACE(hqcat,',','</e><e>')||'</e></ROW>'),'//e')))) a12
on (a11.CODE = a12.HQCAT);
谢谢大家!
我还尝试创建新的多对多视图,如下所示:
WITH TAB AS
( (select id ID, hqcat STR from report))
SELECT ID as ID,
REGEXP_SUBSTR (STR, '[^,]+', 1, LEVEL) HQCAT FROM TAB
CONNECT BY LEVEL <= (regexp_count(str,',') + 1);
但这只会将查询速度降低1000…..返回的是XMLType,而不是varchar2。可以在内联视图中将其强制转换为所需的类型:
cast(EXTRACT(column_value,'/e/text()') as varchar2(3))
或者在比较值时:
a11.CODE = cast(a12.HQCAT as varchar2(3))
我已经猜到了您需要的可变大小,显然,您可能需要不同的大小。您还可以按如下所示使用
在内联视图的from子句中混合使用老式的交叉连接和逗号,在其余的子句中混合使用ANSI连接,这似乎有点奇怪,而且这样做可能会导致奇怪或难以调试。为了清晰起见,您还可以使用另一台CTE:
with t as (select id, hqcat from report),
a12 as (
select id, extract(column_value,'/e/text()').getstringval() hqcat
from t
cross join table(xmlsequence(extract(xmltype('<ROW><e>'||
replace(hqcat,',','</e><e>')||'</e></ROW>'),'//e')))
)
select *
from a12
join bin03 a11 on a11.code = a12.hqcat;