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成功。问题解决。

时间: 2025-01-24 11:35:29

Oracle的ORA-00904错误的相关文章

Oracle数据库ORA 54013错误的解决办法_oracle

ORA-54013: 不允许对虚拟列执行 INSERT 操作 这是Oracle 11 的新特性 -- 虚拟列. 在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引.现在Oracle 11允许我们直接在表上使用虚拟列来存储表达式.虚拟列的值是不存储在磁盘的,它们是在查询时根据定义的表达式临时计算的.我们不能往虚拟列中插入数据,我们也不能隐式的添加数据到虚拟列,我们只能使用物理列来插入数据.然后可以查询

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

plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错"ORA-12154: TNS: 无法解析指定的连接标识符" 解决方法如下: 1.先检查服务器端的监听服务是否打开,如果没有打开请启动其监听 客户端:tnsping <tns_name> 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql

oracle 11g导出数据时报ORA 1455错误的处理方法_oracle

由于导出的该用户的表可能存在空数据表,那么可能就会出现此其异常. 首先: 查看: SQL>show parameter deferred_segment_creation; 如果为TRUE,则将该参数改为FALSE: 在sqlplus中,执行如下命令: SQL>alter system set deferred_segment_creation=false; 然后: 可以针对数据表.索引.物化视图等手工分配Extent SQL>Select 'alter table '||table_n

Oracle数据库TNS常见错误的解决方法汇总_oracle

TNS是Oracle Net的一部分,是专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,就必须配置TNS.本文主要讲述了Oracle数据库TNS常见错误的解决方法如下: 1.ORA-12541:TNS:没有监听器 原因:没有启动监听器或者监听器损坏.若是前者,使用命令net start OracleOraHome10gTNSListener(名字可能有出入)即可;如果是后者,则使用"Net Configuration Assistant"

oracle11g-64位win7cpu安装32位的oracle,出现OUI-10038错误

问题描述 64位win7cpu安装32位的oracle,出现OUI-10038错误 问题如下: 解决方案 mv /etc/oraInst.loc /etc/oraInst.loc.bak 删除或者改名之后,安装oracle就不会还是选择之前的内容了 然后再用oracle用户执行./runI....就行了 解决方案二: 也有可能是你的oracle版本有问题 win7建议你安装oracle11g以上版本,安装oracle10g以下版本时有问题 解决方案三: 请使用管理员权限运行安装程序

oracle 触发器-oracle 中 ora-06550 ora-00201错误

问题描述 oracle 中 ora-06550 ora-00201错误 想在pl/sql中给一个表格 加触发器.但是开始执行这个就出现错误 begin DBMS_NETWORK_ACL_ADMIN.drop_acl ( acl => 'utl_http.xml');------自己命名,注意前后文件名一致 dbms_network_acl_admin.create_acl ( acl => 'utl_http.xml',--前文中自己命名的文件 description => 'Allow

oracle导出协议适配器错误,应用、qlsql正常连接

问题描述 oracle导出协议适配器错误,应用.qlsql正常连接 exp导出数据库发生如下错误. EXP-00056: 遇到 ORACLE 错误 12560 ORA-12560: TNS: 协议适配器错误 EXP-00000: 导出终止失败 exp是放在.bat中的,之前一直在用,bat和oracle一直未做过任何调整,现在发现在导出报错. 应用.plsql链接数据库都是正常的,tsnping也是报错. 查了一些处理方法有3种,启动数据库.监听.添加环境变量和注册表的oracle_sid. 但

oracle 连接 报12547错误,什么原因,该如何解决 ?

问题描述 oracle 连接 报12547错误,什么原因,该如何解决 ? oracle 连接 报12547错误,什么原因,该如何解决 ? 解决方案 下次问这种问题,拜托贴代码. 你看看这个博主呃帖子能解决你的问题不http://blog.csdn.net/liqfyiyi/article/details/7534018

安装Oracle加载数据库错误areasQueries的解决_oracle

正在看的ORACLE教程是:安装Oracle加载数据库错误areasQueries的解决.注意:安装时要保证Oracle安装目录不能带有中文字符 (如果第一次安装出现"加载数据库错误areasQueries"的错误,一般是因为Oracle安装目录带有中文字符的目录) 1. 停止所有关于Oracle的服务 2. 删除Oracle安装目录,主要分布在两个地方(如D盘跟目录下面以及C盘Program Files下面),删除时提示无法删除的错误,重新启动机器重新删除就可以了 3. 删除注册表里

oracle代码的常见错误汇总_oracle

很多使用其他数据库的朋友在转到Oracle数据库的时候经常会犯一些习惯性的错误,本文汇总了一些常见的Oracle代码错误,供大家查询比对. 1. 插入语句写成: insert into t1 values(...) 应为: insert into t1(...) values(...) 2. to_char(sysdate,'YYYYMMDDHHMMSS') 应改为: to_char(sysdate,'YYYYMMDDHH24MISS') 3. select count(*) into v_co