在 Oracle 11gR2 (v11.2.0.4.0) 中
我有一个简单的表格;
创建表“CLAIMS_PATIENT”
(“CLAIMS_PATIENT_ID”编号非空启用,
“NAME_LASTNAME”VARCHAR2(60 字节),
“NAME_FIRSTNAME”VARCHAR2(35 字节),
“NAME_MIDDLENAME”VARCHAR2(25字节),
“ADDR_LINE”VARCHAR2(55 字节),
“ADDR_CITY”VARCHAR2(30字节),
“ADDR_STATE”VARCHAR2(3字节),
“ADDR_ZIP”VARCHAR2(15字节),
“性别”VARCHAR2(1字节),
“出生日期”,
“SSN”VARCHAR2(9字节),
“MATCH_PID”号,
“MATCH_SCORE”数量默认为-1,
“MATCH_DATE”日期,
“PACS_STATUS”VARCHAR2(1 个字节)默认为 NULL,
约束“CLAIMS_PATIENT_PK”主键(“CLAIMS_PATIENT_ID”)
使用索引 PCTFREE 10 INITRANS 2 MAXTRANS 255 计算统计数据
存储(初始 65536 下一步 1048576 最小扩展 1 最大扩展 2147483645
PCTINCREASE 0 个自由列表 1 个自由列表组 1
BUFFER_POOL 默认 FLASH_CACHE 默认 CELL_FLASH_CACHE 默认)
表空间“MYDATA”启用
) 立即创建段
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
无压缩日志记录
存储(初始 65536 下一步 1048576 最小扩展 1 最大扩展 2147483645
PCTINCREASE 0 个自由列表 1 个自由列表组 1
BUFFER_POOL 默认 FLASH_CACHE 默认 CELL_FLASH_CACHE 默认)
表空间“声明”;
我已经填充了一些数据。使用存储过程。现在,当我尝试在 table 上进行任何选择时;
select * from claims_patient;
select count(*) from claims_patient;
select ssn from claims_patient;
它在分号之前的最后一个字符处返回 ora-00904 错误。我使用实时数据库中的 ddl 在测试数据库上创建了这个空表,一切顺利。我尝试过使用 sqldeveloper 和 sqlplus。
此时,我怀疑在我的测试环境中发生了某些崩溃并损坏了表,但我从未在 Oracle 中见过损坏的表,并且自 1995 年以来我一直在使用它。
在我擦掉 table 并重新开始之前,我应该做什么来找出这个问题的根本原因?此时我很好奇,如果我在生产中看到它,了解问题是什么可能会很有用。
根据要求,结果;
select table_name, dump(table_name) from user_tables where table_name like 'CLAIM%ENT';
是;
Typ=1 Len=14: 67,76,65,73,77,83,95,80,65,84,73,69,78,84
最佳答案
嗯,我确实找到了答案。这是在一个不太可能的地方。其中一个索引是基于函数的索引,我没有为其添加 DDL。该功能一夜之间变得无法访问(授权被撤销)。
因此,如果有人找到这个线程并且有一个带有基于函数的索引的表,其中该函数(在构建表和索引之后)变得无法访问、删除、执行权限更改或其他任何情况,您可能会得到一个 ora- 00904 尝试访问表中的任何数据时。
如果 Oracle 能够定义一个更具体的错误来为您指明答案的大致方向,那就太好了。
关于oracle - 在Oracle中如何 "select * from my_table;"返回错误ora-00904?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268095/