在Oracle中,如何从my_table中选择*;"返回errror ora-00904?

时间:2014-08-12 15:18:27

标签: oracle oracle11g

在Oracle 11gR2(v11.2.0.4.0)中

我有一张简单的表格;

CREATE TABLE "CLAIMS_PATIENT" ( "CLAIMS_PATIENT_ID" NUMBER NOT NULL ENABLE, "NAME_LASTNAME" VARCHAR2(60 BYTE), "NAME_FIRSTNAME" VARCHAR2(35 BYTE), "NAME_MIDDLENAME" VARCHAR2(25 BYTE), "ADDR_LINE" VARCHAR2(55 BYTE), "ADDR_CITY" VARCHAR2(30 BYTE), "ADDR_STATE" VARCHAR2(3 BYTE), "ADDR_ZIP" VARCHAR2(15 BYTE), "GENDER" VARCHAR2(1 BYTE), "DOB" DATE, "SSN" VARCHAR2(9 BYTE), "MATCH_PID" NUMBER, "MATCH_SCORE" NUMBER DEFAULT -1, "MATCH_DATE" DATE, "PACS_STATUS" VARCHAR2(1 BYTE) DEFAULT NULL, CONSTRAINT "CLAIMS_PATIENT_PK" PRIMARY KEY ("CLAIMS_PATIENT_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "MYDATA" ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "CLAIMS" ; 我填写了一些数据。使用存储过程。现在当我尝试在桌子上做任何选择时;

select * from claims_patient;
select count(*) from claims_patient;
select ssn from claims_patient;

在分号前的最后一个字符处返回ora-00904错误。我使用来自live db的ddl在我的测试数据库上创建了这个表为空,其中一切都在游泳。我尝试过使用sqldeveloper和sqlplus。

此时我怀疑在我的测试环境中崩溃并损坏了表格,但我从未在Oracle中看到过腐败的表格,自1995年以来我一直在使用它。

在我擦拭桌子然后重新开始之前,我该怎么做才能揭示这个问题的根本原因?在这一点上,我很好奇,如果我在生产中看到它,知道问题是什么可能是有用的。

根据要求,结果;

select table_name, dump(table_name) from user_tables where table_name like 'CLAIM%ENT'; is; Typ=1 Len=14: 67,76,65,73,77,83,95,80,65,84,73,69,78,84

1 个答案:

答案 0 :(得分:3)

好吧,我确实找到了答案。 'Twas在一个不太可能的地方。其中一个我没有包含DDL的索引是一个基于函数的索引。该功能在一夜之间无法访问(授予撤销)。

因此,如果有人找到这个线程并且有一个带有基于函数的索引的表,那么函数(在构建表和索引之后)变得不可访问,删除,执行权限改变,或者其他什么,你可能得到一个ora- 00904尝试访问表中的任何数据时。

如果Oracle要定义一个更具体的错误,指出你的答案的大致方向,那肯定会很好。