`

案例学习Oracle错误:ORA-00904

阅读更多

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的数据库链接时,用select * 的时候字段名是用双引号引起来的。你创建表的语句加了双引号的吗?估计是PD类似的工具创建的脚本吧?

  看下面的例子

  SQL> create table test ("id" number not null);

  表已创建。

  SQL> select ID FROM test;

  select ID FROM test

  *

  ERROR 位于第 1 行:

  ORA-00904: "ID": 无效的标识符

  SQL> select id from test;

  select id from test

  *

  ERROR 位于第 1 行:

  ORA-00904: "ID": 无效的标识符

  SQL> desc test;

  名称 是否为空? 类型

  ----------------------------------------- -------- ------------

  id NOT NULL NUMBER

  SQL> select "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是否存在:

  select owner,object_name,object_type,object_id,status

  from dba_objects where object_name='exu8jbqu';

  发现存在。重新执行$ORACLE_HOME/rdbms/admin/catexp.sql 创建视图。

  重新执行exp成功。问题解决。


  案例三:

  环境 unix+oracle

  在做完全导出的时候,导出表都正常但到导出同义词时出错,错误如下:

  exporting synonyms

  exp-0000 racle error 904 encountered

  ora-00904 invalid column name

  exp-0000 exp terminaled unsuccessful

  使用任何一个用户导出该的数据同样在这个地方停住,请问这是由于什么情况造成的,该如何解决才能正常exp整个数据库呢?之前碰上过类似的情况: 数据库被改了字符集后,导出时也是到synonym的时候出错误,报"shortname" 错误,后来把字符集改回原来安装的时候选择的字符集即可。 使这个问题吗?

  解决方案:原因不是字符集的问题,而是同义词引起的,找出来将其删除就可以了。

  案例四:Oracle环境中访问所有的SQL Server字段出错

  问题描述:我刚刚从Oracle建立了一条到SQL Server的连接,使用的是普通的连接,我想要执行一条select * from tablename@dblink 的命令。然而,我注意到SQL Server表中所有的字段都无法在Oracle环境中访问。当我试图选择我认为应该在表中的字段的时候,我得到ORA-00904的错误信息:无效列名。针对这个问题的可能的解释和解决方案是什么?

  解决方案:当你在你的语句中指定了列名的时候,确保你用双引号括住了列名,并且名字是区分大小写的。例如:SELECT "column_A","Column_B" FROM "TableXYz"。

  Oracle倾向于将上述字母转换为大写字母,SQL Server则对大小写更加敏感。这就是最有可能的原因。

  案例五:不访问系统表获取无效列名

  问题描述:当我从我的应用程序中运行SQL语句的时候,我得到如下的错误信息:“ORA-00904”无效列名。我的问题是,在不访问系统表的时候,有没有一种方式可以获得有关这个错误的更多信息,例如那些无效的列名?

  解决方案:当你获得这个消息的时候运行了什么查询?你的答案就在这里。运行的查询中的一个列是无效的。如果你能运行这个查询,那么你就可以看到包括了查询中表的信息的“系统表”。只需要开启SQL*Plus 会话,并且对表(或者一些表)进行描述。你的查询中的一个列就不会是其中一个表的有效列名了。

  如果你不知道SQL语句是什么,那么你就要运行的时候进行追踪,找出错误中的语句。如果你不熟悉,不知道该怎么做的话,需要请求数据库 管理 员的帮助。

  案例六:查看拥有抽象字段数据类型的表中记录出错

  问题描述:我想要查看一个表中记录,这个表中有一个字段具有抽象的数据类型,我创建了如下的类型:

  create or replace type marks_ty as object

  (m1 number(3),

  m2 number(3),

  m3 number(3),

  member function totmarks(m1 in number,m2 in

  number,m3 in number)

  return number);

  /

  然后我创建了如下的类型体:

  create or replace type body marks_ty as

  member function totmarks(m1 number,m2 number,m3

  number)

  return number is

  begin

  return (m1+m2+m3);

  end;

  end;

  /


 其次,创建了如下的表:

  create table stdmarks

  ( student_id number(4),

  marks marks_ty);

  然后,我向其中插入了一些记录。之后,我执行了如下的语句:

  select marks.totmarks(marks.m1,marks.m2,marks.m3)

  from stdmarks;

  但是我却碰到了如下的错误信息:

  select marks.totmarks(marks.m1,marks.m2,marks.m3)

  from stdmarks

分享到:
评论

相关推荐

    解决 navicat连接oracle报错:ORA-12737InstantClientLight

    然而,有时在使用Navicat连接Oracle数据库时可能会遇到各种问题,如"ORA-12737 InstantClientLight"错误。本文将深入探讨这个错误及其解决方案,同时也会涉及Navicat与Oracle的集成以及InstantClient的相关知识。 ...

    Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法.pdf

    Oracle数据库不同版本间的客户端与服务端的连接问题通常涉及到安全和兼容性配置,这篇文章主要讲述了在Oracle 11g R2客户端尝试连接Oracle 19c服务端时,遇到了两个特定的错误:ORA-28040和ORA-01017,以及如何解决...

    oracle ora-03113错误

    ORA-03113 是一个较为常见的Oracle错误,通常出现在网络通信出现问题时,具体表现为“end-of-file on communication channel”(通信通道上的文件结束)。此错误可能由多种因素引发,包括但不限于Unix核心参数设置...

    oracle报错(ORA-00600)问题处理

    Oracle数据库在运行过程中可能会遇到各种错误,其中ORA-00600是一个内部错误代码,表示遇到了数据库系统内部无法处理的异常情况。这个错误通常与数据库的底层结构或数据不一致有关,它不是一个通用错误,而是针对...

    离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法

    ORA-01033是Oracle数据库启动过程中遇到的一种常见错误。当数据库实例在启动过程中无法正常初始化或打开时,就会触发此错误。该错误通常出现在数据库实例启动到系统全局区(SGA)阶段后,但尚未完全加载数据文件之前...

    ora-227101错误解决办法

    在Oracle数据库管理与维护的过程中,遇到各种错误代码是家常便饭,其中“ORA-227101”错误虽然在题目中被误标,实际案例中展示的是“ORA-27101”错误,这是一个较为常见的问题,通常发生在数据库服务未能正确启动或...

    ora-01720 授权选项对于'xxxx'不存在的解决方法

    然而,在进行权限授予时可能会遇到各种各样的错误,其中`ORA-01720`就是一个典型的例子。该错误提示“授权选项对于'xxxx'不存在”,这通常发生在试图授予一个对象的访问权限给其他用户或角色时。 #### 错误场景 ...

    oracle11g 内部参数出错问题

    Oracle 11g 内部错误代码 ORA-00600 是一个非常通用的错误,它表示数据库遇到了一个无法处理的内部错误或异常情况。这个错误通常涉及到Oracle数据库的底层结构,如数据块、索引或者内存管理等,且参数列表可以提供...

    数据库ORA-01460错误的解决方法

    ORA-01460错误全称为“ORA-01460: unimplemented unreasonable conversion requested”,主要出现在Oracle数据库中,当系统试图将一种数据类型转换为另一种无法处理的数据类型时触发。这种错误常见于数据导出(如...

    oracle断电导致控制文件不一致报错ORA-00214处理

    在Oracle数据库管理过程中,遇到控制文件版本不一致的问题时,通常会收到ORA-00214错误提示。此错误表示数据库中的一个或多个控制文件与其它控制文件版本不匹配,这可能是由于突然断电、硬件故障或其他原因导致的...

    oracle ORA-01114、ORA-27067错误解决方法

    今天有朋友问到如下一则案例,ORA-01114,ORA-27067以及OSD-04026错误同时出现: *** ACTION NAME:() 2009-04-01 09:31:00.762*** MODULE NAME:(JDBC Thin Client) 2009-04-01 09:31:00.762*** SERVICE NAME:(SYS$...

    Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例

    **错误案例1:ORA-39065 和 ORA-44002** 这两个错误通常涉及到数据泵在处理数据泵作业时内部出现的异常。ORA-39065 表示在DISPATCH过程中遇到了未预期的主进程异常,而ORA-44002则意味着对象名无效。这个错误可能是...

    Oracle常见错误:ORA

    在本案例中,我们关注的是两个特定的错误:ORA-01403 和 ORA-06512。 ORA-01403 错误表示“未找到任何数据”,它通常出现在一个`SELECT INTO`语句执行后没有找到匹配的记录。当在PL/SQL块中使用`SELECT INTO`将查询...

    SHOUG文档分享-ORACLE-TTS迁移后ORA3113错误处理-SHOUG成员左翼

    通过对告警日志的分析,找到了一个ORA-07445错误,这是一个严重的内部错误,通常与Oracle数据库内核的某个函数调用有关。具体到这个案例,错误发生在kafger()函数调用中。这是一个内部函数,与Oracle进程地址空间的...

    plsql连接oracle数据库报ora 12154错误解决方法

    ### PL/SQL连接Oracle数据库报ORA-12154错误及解决方法 #### 错误概述 在尝试使用PL/SQL Developer连接Oracle数据库时,可能会遇到“ORA-12154: TNS: 无法解析指定的连接标识符”这一错误。此错误通常表明PL/SQL ...

    oracle10g服务器断电恢复

    - 当服务器重新启动并尝试打开数据库时,Oracle 报告 Ora-01113 错误,表示文件 5 需要介质恢复。这意味着数据文件可能损坏或未完成事务。 - 随后执行 `recover datafile 5` 命令,却收到 Ora-00283 和 Ora-00353 ...

    oracle数据库错误大全

    在Oracle中,错误通常由一个三位或四位的数字表示,如ORA-00001、ORA-600等。这些错误号与特定的错误消息关联,错误消息会提供关于问题的详细信息,包括可能的原因和建议的解决方案。 Oracle数据库错误大全可能包含...

Global site tag (gtag.js) - Google Analytics