首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试Oracle投影列表中的Alien_Body_Part (NCLOB)值?

如何测试Oracle投影列表中的Alien_Body_Part (NCLOB)值?
EN

Stack Overflow用户
提问于 2011-04-20 10:34:45
回答 1查看 707关注 0票数 2

我有一个有三个NCLOB列的表。对于每个NCLOB,我想要一个计数,有多少不是'TC‘或'NC’。的案子.end方法适用于NVARCHAR2列,但不适用于NCLOB。如何测试投影列表中NCLOB的值?

Oracle数据库11g版本11.1.0.6.0

这个最小的例子演示了根本问题。

代码语言:javascript
复制
create table t (
  alien_body_part nclob
);

insert into t(alien_body_part) values(null);
insert into t(alien_body_part) values('TC');
insert into t(alien_body_part) values('NC');
insert into t(alien_body_part) values('Extended Mandible');

select case when alien_body_part in ('TC', 'NC') then 0 else 1 end from t
                 *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got NCLOB
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-20 10:45:33

只比较第一个字符:

代码语言:javascript
复制
SQL> SELECT dbms_lob.substr(alien_body_part, 4000, 1) body_part,
  2         CASE
  3            WHEN dbms_lob.substr(alien_body_part, 4000, 1)
  4                 IN ('TC', 'NC') THEN
  5             0
  6            ELSE
  7             1
  8         END is_nc_or_tc
  9    FROM t;

BODY_PART              IS_NC_OR_TC
---------------------- -----------
                                 1
TC                               0
NC                               0
Extended Mandible                1

在这种情况下,由于比较的一侧只有2个字符,所以比较前3个字符就足够了(因为NCLOB只有在两个字符长且这些字符明显等于'TC‘时才等于'TC’)。

此外,无论是情况还是IN都不是造成此处错误的原因(不能直接比较SQL中的CLOB/NCLOB ),请考虑:

代码语言:javascript
复制
SQL> select * from t where alien_body_part = 'TC';

select * from t where alien_body_part = 'TC'

ORA-00932: inconsistent datatypes: expected - got NCLOB
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5728922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档