SQL将varchar转换为SQL联合中的clob

时间:2013-02-14 17:47:00

标签: sql oracle

为什么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值。

1 个答案:

答案 0 :(得分:4)

我不相信wm_concat会返回CLOB

这表明返回Typ=1VARCHAR2

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

将起作用