2

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

4

1 回答 1

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返回的 byWM_CONCAT转换为 a CLOB,则下一个问题是 Oracle 不支持对执行 a所需DISTINCTCLOB列执行 a UNION。假设您真的不需要删除重复的行,您可以使用 aUNION ALL而不是 a 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

将工作

于 2013-02-14T17:59:08.707 回答