2

オラクルが次のクエリを許可しないのはなぜですか

select to_clob(1) from dual
union
select wm_concat(sysdate) from dual;

wm_concatclob を返します。ユニオン内の両方のクエリに同じ型の列を持たせるには、最初のクエリの列を clob に変換しますが[1]: ORA-00932: inconsistent datatypes: expected - got CLOB、両方が clob 値を返しているにもかかわらず、Oracle はエラーを返します。

各クエリは個別に機能し、両方とも clob 値を返します。

4

1 に答える 1

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の の実行をサポートしていないことです。重複する行を実際に削除する必要がないと仮定すると、ではなくを使用できます。 CLOBUNIONUNION ALLUNION

二つ合わせるとこんな感じ

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 に答える