用户名: 密码: 注册 找回密码
搜索   
收藏本站 设为主页
首页
新闻 供求 报价 技术 下载 商家 商城 博客
论坛
硬件学院 软件学院 解决方案
技术查找 
  按标题 按全文
相关技术
· 如何得到AIX系统安装时间...
· AIX如何限制用户SSH远程...
· 主流虚拟主机布阵方式浅...
· KVM主机切换系统轻松管理...
· 服务器技术之负载均衡技...
· 设置一台虚拟的 FTP 服务...
最近头条
· 微软云计算平台Windows ...
· Intel企业级固态硬盘开始...
· IBM花费3年打造“网络故...
· 《中关村日报》IT渠道商...
· AMD公司一分为二 获60亿...
· IBM携Bluehouse参战云计...
相关供求
· CX600 CX700 EMC后备电池...
· 迅驰光纤收发器/光电转换...
· 单模室外架空光缆/双铠双...
· 威腾37u服务器机柜13120...
· SUN Blade2000/B1000,B1...
· 批发HP,IBM各系列服务器...
Advertisement
 首页 > 技术频道 > 软件学院 > 浏览技术 关键字: oracle  数据库 
OracleORA-00903错误具体原因分析
2006-6-21 12:24:45   equalnull   来源:中华服务器网    点击:981次   加入收藏夹

ORA-00903 invalid table name  
ORA-00903:无效的表名 

Cause A table or cluster name is invalid or does not exist. This message is also issued if an invalid cluster name or no cluster name is specified in an ALTER CLUSTER or DROP CLUSTER statement.  Action Check spelling. A valid table name or cluster name must begin with a letter and may contain only alphanumeric characters and the special characters $, _, and #. The name must be less than or equal to 30 characters and cannot be a reserved word. 

 原因:表名或簇名不存在或无效,当运行ALTER CLUSTER 或 DROP CLUSTER语句时,会出现此错误信息。  方案:检查拼写是否正确。一个有效的表名或簇名必须以字母开头,只含有字母或数字,不能超过30个字符,可以包含一些特殊字符$, _, #。表名或簇名不能是关键字。
 
 案例一: 使用 DBMS_SQL包执行DDL语句 

 ----------------------------------------------------  The DBMS_SQL package can be used to execute DDL statements directly from PL/SQL. 
 这是一个创建一个表的过程的例子。该过程有两个参数:表名和字段及其类型的列表。

  CREATE OR REPLACE PROCEDURE ddlproc (tablename varchar2, cols varchar2) AS  cursor1 INTEGER;  BEGIN  cursor1 := dbms_sql.open_cursor;  dbms_sql.parse(cursor1, ’CREATE TABLE ’ || tablename || ’ ( ’ || cols || ’ )’, dbms_sql.v7);  dbms_sql.close_cursor(cursor1);  end;  /  SQL> execute ddlproc (’MYTABLE’,’COL1 NUMBER, COL2 VARCHAR2(10)’);  PL/SQL procedure successfully completed.  SQL> desc mytable;  Name Null? Type  ------------------------------- -------- ----  COL1 NUMBER  COL2 VARCHAR2(10)  

注意:DDL语句是由Parese命令执行的。因此,不能对DDL语句使用bind变量,否则你就会受到一个错误信息。  

下面的在DDL语句中使用bind变量的例子是错误的。 
 **** Incorrect Example ****  
CREATE OR REPLACE PROCEDURE ddlproc (tablename VARCHAR2,  colname VARCHAR2,  coltype VARCHAR2) AS  cursor1 INTEGER;  ignore INTEGER;  BEGIN  cursor1 := dbms_sql.open_cursor;  dbms_sql.parse(cursor1, ’CREATE TABLE :x1 (:y1 :z1)’, dbms_sql.v7);  dbms_sql.bind_variable(cursor1, ’:x1’, tablename);  dbms_sql.bind_variable(cursor1, ’:y1’, colname);  dbms_sql.bind_variable(cursor1, ’:z1’, coltype);  ignore := dbms_sql.execute(cursor1);  dbms_sql.close_cursor(cursor1);  end;  /  

虽然在过程创建时,没有错误信息。但在运行时,你将得到错误信息"ORA-00903: invalid table name" 。  SQL> execute ddlproc (’MYTABLE’, ’COL1’, ’NUMBER’);  begin ddlproc (’MYTABLE’, ’COL1’, ’NUMBER’); end;  *  ERROR at line 1:  ORA-00903: invalid table name  ORA-06512: at "SYS.DBMS_SYS_SQL", line 239  ORA-06512: at "SYS.DBMS_SQL", line 25  ORA-06512: at "SCOTT.DDLPROC", line 8  ORA-06512: at line 1  

案例二:SQL*Plus 中的触发器错误  

你是如何发现dbms_error_code 数字的呢?我如何才能在SQL*Plus 中显示Oracle错误信息描述呢?  第1行错误:  ORA-04098: ’SYSTEM.LOG_ERRORS_TRIG’触发器无效,并且无法再次生效  
ORA-00903: 无效表明  
ORA错误可以在错误信息指南(technet.oracle.com上可以找到完全的文档)中找到。你列出的错误信息说的是SYSTEM ID拥有的名为LOG_ERRORS_TRIG的触发器无效了,因为触发器中参考了一个无效的表名。你需要找出触发器代码并从那里开始继续。

(the end)

对不起,您需要登录后才能查看全部详细内容
上一条技术: Oracle数据库配置错误信息解决方法
下一条技术: Oracle数据库系统使用经验六则


关于我们 法律声明 广告服务 友情链接 联系我们
版权所有:中华服务器网©2001-2008
粤ICP备05008160号 由深圳市七乘二四信息技术有限公司提供技术支持。
 客 服