Oracle:Blob列抛出不一致的数据类型

问题描述 投票:1回答:1

我有三个oracle环境,一个查询在两个环境中运行成功,但抛出了 ORA-00932: inconsistent datatypes: expected - got BLOB 在第三个环境中。

查询

select
        distinct mytable.ID as ID1_130_,
        mytable.CODE as CODE2_130_,
        mytable.MY_LOGO as PRIMARY_8_130_,
    from
        MY_TABLE mytable;

MY_LOGO列是BLOB。

谁能解释一下为什么查询只在第三个数据库上抛出异常,或者我应该检查什么?

database oracle blob distinct
1个回答
1
投票

TL;DR:你需要在第三个环境中重建主键。

错误信息是误导性的(就像Oracle经常出现的那样),它应该是这样的。'DISTINCT不能与BLOBs一起使用。.

你对Magnus Johansson的提示是正确的,是主键的状态。这里有一个最小的例子。

CREATE TABLE t (id NUMBER CONSTRAINT pk PRIMARY KEY, b BLOB);
INSERT INTO t VALUES (1, EMPTY_BLOB());

SELECT DISTINCT 只要选择了主键,就可以工作。可能的逻辑是,如果涉及到主键,其余的列,包括BLOB,也要保证与众不同。

SELECT DISTINCT id, b FROM t;
1 (BLOB)

SELECT DISTINCT b FROM t;
ORA-00932: inconsistent datatypes: expected - got BLOB

这只有在支持索引的情况下才会有效。如果你移动(或重组)了表,使索引变得不可用,你就会得到你的全局性错误信息。

ALTER TABLE t MOVE;
SELECT status from USER_INDEXES WHERE index_name='PK';
UNUSABLE

SELECT DISTINCT id, b FROM t;
ORA-00932: inconsistent datatypes: expected - got BLOB

一旦你修复了索引,它就会重新工作。

ALTER INDEX pk REBUILD;
SELECT status from USER_INDEXES WHERE index_name='PK';
VALID

SELECT DISTINCT id, b FROM t;
1 (BLOB)

奇怪!

© www.soinside.com 2019 - 2024. All rights reserved.