收 藏 投 稿 繁 体 RSS 
站长吧-中国站长学习与交流的网站
首 页 运 营 学 院 建 站 论 坛
Web master8.net  
 网站运营  
  欢迎在本站发布信息,在线投递稿件请点这里。编辑QQ:4908220,欢迎联系交流。
业界动态 创业故事 推广研究 策划盈利 电子商务 企业平台
  站长工具
SEO查询 Whois查询 Pr查询 域名查询 IP查询 网页编辑器
 建站服务  
  如有建站意向,请尽快联系我们,以便安排时间... 建站服务 QQ4908220 QQ:4908220
作品展示 服务范围 服务流程 服务报价 联系方式 付款方式
文章正文  » 您的当前位置: 首页 >> 学院 >> 数据库 >> Oracle
Oracle ORA-00903错误具体原因分析
  来源:互联网 | 时间:2006-04-25 | 浏览:   相关评论 | 报告错误 | 发布文章
【字号: | | 】 【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)

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的触发器无效了,因为触发器中参考了一个无效的表名。你需要找出触发器代码并从那里开始继续。

(:)

master8
  • 上一篇:ORACLE常见错误代码的分析与解决
  • 下一篇:Skype出台海外赔偿方案

  • 我要投稿  打印本文  推荐本文  加入收藏  返回顶部  关闭窗口
    搜模板(www.somoban.com) 原创网站模板交易平台
    阿里妈妈再掀疯狂采购风,网站广告位严重告急,急召天下站长
    基于PHP+MySQL的整站、模块、插件开发等或者按需求实现相应功能;
基于各PHP主流建站系统CMS,BBS,BLOG等的模板定制,完全手写代码;
整站数据迁移或备份恢复;网页代码优化、重构;整站常规SEO优化;网站技术支持;
点击了解详情...
    站长论坛
    • 验证码: