Database Oracle:Blob列抛出不一致的数据类型
我有三个oracle环境,一个查询在两个环境中成功运行,但在第三个环境中抛出Database Oracle:Blob列抛出不一致的数据类型,database,oracle,blob,distinct,Database,Oracle,Blob,Distinct,我有三个oracle环境,一个查询在两个环境中成功运行,但在第三个环境中抛出ORA-00932:inconsistent datatypes:expected-get BLOB 询问 select distinct mytable.ID as ID1_130_, mytable.CODE as CODE2_130_, mytable.MY_LOGO as PRIMARY_8_130_, from MY_TABLE mytab
ORA-00932:inconsistent datatypes:expected-get 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_徽标列是BLOB
有人能解释为什么查询只在第三个数据库上抛出异常,或者我应该检查什么吗?TL;DR:您需要在第三个环境中重建主键 错误消息具有误导性(与Oracle一样常见),应该是“DISTINCT不适用于Blob” 你对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
这只在支持索引为healty时有效。如果移动(或重新构造)表,使索引变得不可用,则会收到omnious错误消息:
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)
奇怪 您不能将BLOB列与
DISTINCT
一起使用,但它在其他环境中可以正常工作?那么,该列在其他环境中不是BLOB。该列在所有环境中都不是BLOB,并且它在第三个环境中工作,然后突然停止工作。很明显,你在马格纳斯的博客中找到了答案。最好的方法是你发布一个答案,这样其他用户就可以分享。理想情况下,您可以通过在三个环境中查找查询结果来验证Magnus怀疑:SELECT constraint_type,status,validated FROM alL_constraint,其中table_name='MYTABLE'代码>并将其包含在您的答案中。