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

Oracle: Blob column throws inconsistent datatypes

我有三个 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

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

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

错误消息具有误导性(Oracle 经常如此),它应该是 'DISTINCT does not work with 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

这仅在支持索引健康时有效。如果您移动(或重组)table,使索引变得不可用,您会收到错误消息:

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)

奇怪!