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

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值