sqlplus修改表结构时。提示无效的字符?
sqlplus建立表BH,
SELECT * FROM BH;查询没有问题。
但是我要修改一个字段的大小alter table BH modify (DESCRIPTION1 varchar2(100));提示ORA-00904: "DESCRIPTION1": 无效的标识符
sqlplus建立表BH,
SELECT * FROM BH;查询没有问题。
但是我要修改一个字段的大小alter table BH modify (DESCRIPTION1 varchar2(100));提示ORA-00904: "DESCRIPTION1": 无效的标识符
看看表里面有没有字段DESCRIPTION1?
http://topic.csdn.net/u/20090328/10/2764ae8f-dc64-45df-8283-9e9b723a2845.html是否建表时也加了双引号? 如果是这样的话需要在使用的时候也加上双引号。
案例三: 环境 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 s_ty as object (m1 number(3), m2 number(3), m3 number(3), member function tots(m1 in number,m2 in number,m3 in number) return number); / 然后我创建了如下的类型体: create or replace type body s_ty as member function tots(m1 number,m2 number,m3 number) return number is begin return (m1+m2+m3); end; end; / 其次,创建了如下的表: create table stds ( student_id number(4), s s_ty); 然后,我向其中插入了一些记录。之后,我执行了如下的语句: select s.tots(s.m1,s.m2,s.m3) from stds; 但是我却碰到了如下的错误信息: select s.tots(s.m1,s.m2,s.m3) from stds * ERROR at line 1: ORA-00904: invalid column name 请帮助我。我在Oracle企业版中都试过了。 解决方案:一个有关你进行的操作的很少被人了解的事实就是你需要给表名起个别名,并且在调用成员函数的时候使用别名。那么,对你的查询进行如下修改: SELECT s.s.tots(s.m1,s.m2,s.m3) FROM stds s; 案例七:探究ORA-00904错误信息 问题描述:我注意到您对ORA-00904错误信息的解答,这个ORA-00904错误信息是在链接SQL 服务器数据库表之后,试图对不同类型的列进行选择时出现的。您的答案说,每个列都需要用双引号来包围。这样做好吗?我们有一个应用程序,但是我们并不希望有这样的限制。这里面有什么考虑吗? 解决方案:你可以试试看,改变你的SQL服务器实例的校验,使它不为默认情况下的大小写敏感。此时,表名“MyTable”和“MYTABLE”指的是同一个表。
alter table BH modify DESCRIPTION1 varchar2(100);
不用要括号 显示下你的表结构 看看有没有DESCRIPTION1这个字段(注意这个字段一定是原来你表里面的字段)
如果要更换字段名 就把那一列删了 再增加一列
alter table BH drop column 列名;
alter table BH add 列名 数据类型......
=============================================
应该是列名错误,有可能是三楼所说的问题