案例学习Oracle错误:ORA-00904[1]

文章作者 100test 发表时间 2007:03:14 14:03:15
来源 100Test.Com百考试题网


ORA-00904 invalid column name
  ORA-00904: 无效的列名
  Cause The column name entered is either missing or invalid.
  Action Enter a valid column name. A valid column name must begin with a letter, be less than or equal to 30 characters, and consist of only alphanumeric characters and the special characters $, _, and #. If it contains other characters, it must be enclosed in double quotation marks. It may not be a reserved word.
  原因:列丢失或无效列名。
  方案:输入有效的列名。一个有效的列名必须是以字母开头,小于30个字符,并且只包含字母、数字或一些特殊的符号$,_,#。如果还包含其它的字符,那么这段字符必须用双引号引起来。列名不能是关键字。
  案例一:创建表时出现的问题
  问题描述:
  SQL> DESC S_CUSTOMER.
  名称 是否为空? 类型
  -----------------------------------------
  id NOT NULL NUMBER(7)
  name NOT NULL VARCHAR2(50)
  phone VARCHAR2(25)
  address VARCHAR2(400)
  city VARCHAR2(30)
  state VARCHAR2(20)
  country VARCHAR2(30)
  zip_code VARCHAR2(75)
  credit_rating VARCHAR2(9)
  sales_rep_id NUMBER(7)
  region_id NUMBER(7)
  comments VARCHAR2(255)
  但是当我SELECT的时候总是报错:
  SQL> SELECT ID FROM S_CUSTOMER.
  SELECT ID FROM S_CUSTOMER
  *
  ERROR 位于第 1 行:
  ORA-00904: "ID": 无效的标识符
  怎么会这样呢?
  解决方案:ORACLE通过访问SQL Server的数据库链接时,用0select * 的时候字段名是用双引号引起来的。你创建表的语句加了双引号的吗?估计是PD类似的工具创建的脚本吧?
  看下面的例子
  SQL> create table test ("id" number not null).
  表已创建。
  SQL> 0select ID FROM test.
  0select ID FROM test
  *
  ERROR 位于第 1 行:
  ORA-00904: "ID": 无效的标识符
  SQL> 0select id from test.
  0select id from test
  *
  ERROR 位于第 1 行:
  ORA-00904: "ID": 无效的标识符
  SQL> desc test.
  名称 是否为空? 类型
  ----------------------------------------- -------- ------------
  id NOT NULL NUMBER
  SQL> 0select "id" from test.
  未选定行
  SQL>
  案例二:
  环境:solaris oracle
  问题:exp时遇到
  EXP-00008: ORACLE error 904 encountered
  ORA-00904: invalid column name
  EXP-00000: Export terminated unsuccessfully
  提供的情况:wcs组使用java,所以判断是java的问题。ora-00904时oracle的一个bug。
  所以需要使用errorstack来追踪错误。执行
  alter system set events=904 trace name errorstack.
  然后到udump下查看trace文件。发现是exu8jbqu这个view的问题。
  alter system set events=904 trace name errorstack off.
  查看exu8jbqu是否存在:
  0select owner,object_name,object_type,object_id,status
  from dba_objects where object_name=exu8jbqu.
  发现存在。重新执行$ORACLE_HOME/rdbms/admin/catexp.sql 创建视图。
  重新执行exp成功。问题解决。

相关文章


Oracle、IBM、BEA服务器测试和比较
Oracle与MSSQL过程之间的转化[2]
一个容易忽视的Oracle数据安全问题
Oracle与MSSQL过程之间的转化[1]
案例学习Oracle错误:ORA-00904[1]
Oracle归档模式的命令及参数说明
oracle中实现自动增长列
针对Oracle10gEM乱码之快速解决方法
Oracle8i迁移到10g出现的问题及解决
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛