为什么oracle不允许以下查询
select to_clob(1) from dual
union
select wm_concat(sysdate) from dual;
wm_concat
返回一个clob。为了使联合中的两个查询具有相同的类型列,我将第一个查询中的列转换为clob,但Oracle给出了[1]: ORA-00932: inconsistent datatypes: expected - got CLOB
错误,即使两者都返回clob值。
每个查询都单独工作,并且都返回clob值。
答案 0 :(得分:4)
我不相信wm_concat
会返回CLOB
。
这表明返回Typ=1
是VARCHAR2
SQL> select dump(wm_concat(sysdate)) from dual;
DUMP(WM_CONCAT(SYSDATE))
--------------------------------------------------------------------------------
Typ=1 Len=9: 49,52,45,70,69,66,45,49,51
您还可以查看是否创建了视图
SQL> ed
Wrote file afiedt.buf
1 create view vw_wm_concat
2 as
3* select wm_concat(sysdate) col from dual
SQL> /
View created.
SQL> desc vw_wm_concat;
Name Null? Type
----------------------------------------- -------- ----------------------------
COL VARCHAR2(4000)
如果您将VARCHAR2
返回的WM_CONCAT
转换为CLOB
,则下一个问题是Oracle不支持在DISTINCT
上执行CLOB
为了执行UNION
所必需的列。假设您确实不需要删除重复的行,则可以使用UNION ALL
而不是UNION
。
将两者放在一起,就像这样
SQL> ed
Wrote file afiedt.buf
1 select to_clob(1) from dual
2 union all
3* select to_clob(wm_concat(sysdate)) col from dual
SQL> /
TO_CLOB(1)
------------------------------------------------------------
1
14-FEB-13
将起作用