ORA-00932: inconsistent datatypes: expected - got CLOB

    今天要对一张大表进行分表,大表的定义大致如下(省略了一些): 

create table RUNLOG_DETAIL
(
  DETAIL_ID NUMBER(10) not null,
  RECORD_ID        VARCHAR2(20),
  FIELD_VALUE          VARCHAR2(4000),
  FIELD_VALUE_CLOB     CLOB
);

create table RUNLOG_DETAIL_HIS
(
  DETAIL_ID NUMBER(10) not null,
  RECORD_ID        VARCHAR2(20),
  FIELD_VALUE          VARCHAR2(4000),
  FIELD_VALUE_CLOB     CLOB
);

在进行下列操作的时候出现ORA-00932的错误

select * from RUNLOG_DETAIL
minus
select * from RUNLOG_DETAIL_HIS;

在oracle 的联机文档中查到minus的限制:

Restrictions on the Set Operators The set operators are subject to the following restrictions:

  • The set operators are not valid on columns of type BLOB, CLOB,BFILE, VARRAY, or nested table.

想再深入的了解一下,执行下列语句同样报这个错

  select distinct  FIELD_VALUE_CLOB from  RUNLOG_DETAIL;
揣测是distinct 的问题,union、minus、INTERSECT 用到了distinct, union all没有用到,实验下列语句没有错

select * from RUNLOG_DETAIL
union all
select * from RUNLOG_DETAIL_HIS;

当实验union、INTERSECT 则同样的报错,结论:不能进行distinct clob。

 

另:union、minus、INTERSECT 用到了distinct, union all没有用到实验:

SQL> create table test1(a varchar2(10));
 
Table created
SQL> create table test2(a varchar2(10));
 
Table created
SQL> insert into test1 values(1);
 
1 row inserted
SQL> insert into test1 values(1);
 
1 row inserted
SQL> insert into test1 values(2);
 
1 row inserted
SQL> insert into test1 values(2);
 
1 row inserted
SQL> insert into test2 values(1);
 
1 row inserted
SQL> commit;
 
Commit complete
SQL> select * from test1
  2  minus
  3  select * from test2;
 
A
----------
2
SQL> select * from test1
  2  INTERSECT
  3  select * from test2;
 
A
----------
1
SQL> select * from test1
  2  union
  3  select * from test2;
 
A
----------
1
2
SQL> select * from test1
  2  union all
  3  select * from test2;
 
A
----------
1
1
2
2
1

 



你可能感兴趣的:(sql,null,table,insert,nested)