1

私のプロジェクトでは、マテリアライズド ビューで CLOB 列を含むテーブルを TO_CHAR を使用して変換して使用したため、結果の列はサイズが 4000 文字の VARCHAR2 になります。

MAX(CASE WHEN BONG_NARR_TY = 'ADTX' AND TO_CHAR(BONG_NARR_TX) IS NOT NULL THEN BONG_NARR_TX END ) AS ADTX_OP_NARR,

ビューに 4000 文字を超える文字を表示することは可能ですか?

TO_CHAR
MAX(CASE WHEN BONG_NARR_TY = 'ADTX' AND BONG_NARR_TX IS NOT NULL THEN BONG_NARR_TX END ) AS ADTX_OP_NARR,

次のエラーが表示されます。

SQL Error: ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 -  "inconsistent datatypes: expected %s got %s"

CLOB のサイズは 8Gb ですが、View のために 4Kb に制限されています :)

4

2 に答える 2

2

CLOBではご利用いただけませんMAX()。で使用できます。CLOBMATERIALIZED VIEW

于 2015-07-03T07:37:39.120 に答える
1

すでに指摘したようMAX()に、CLOB列では使用できません。

CLOB 値の最初の 4000 文字が異なる場合は、 を使用DBMS_LOB.SUBSTR()してこれを文字列として抽出し、この値で並べ替えて、この CLOB を返すことができます。

例 (ウィンドウ関数ROW_NUMBER()を使用して行のランキングを取得):

create table test(
 pk number not null primary key,
 bong_narr_ty varchar2(10) not null,
 bong_narr_tx CLOB
);

insert into test(pk, bong_narr_ty, bong_narr_tx)
  values(1, 'ADTX', 'A');
insert into test(pk, bong_narr_ty, bong_narr_tx)
  values(2, 'ADTX', 'B');

create materialized view mv_test 
build immediate
as 
select bong_narr_tx as adtx_op_narr
from
  (select t.*, row_number() over (
      partition by 1 order by dbms_lob.substr(bong_narr_tx, 4000, 1) desc) as rn
   from test t
  )
where rn=1;
于 2015-07-03T07:51:49.783 に答える