我有三个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不能与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)
奇怪!