在网上查了下报错信息,原因是表名重复。
我新建了一个Oracle数据库,只执行此表名的建表sql语句,还是报错,说明不是SQL语句中重复建表,应该是跟Oracle数据库中某个名重复。
使用 select * from tab; 查看所有表,发现没有与表重名的表。
因为我这个SQL文件是从MySQL数据库转换过来的(使用的是SQLdeveloper 4.2),所有数据已经设置好,无法通过改动表名来解决报错。
将转换好的SQL文件导入到Oracle数据库后,所有表均已导入,没有缺失。
后改为使用 CREATE TABLE or replace +表名 报错 ORA-00903: 表名无效
附上建表的SQL语句片段。
CREATE TABLE "SYSTEM"."AQ$_INTERNET_AGENTS"
( "AGENT_NAME" VARCHAR2(30 BYTE),
"PROTOCOL" NUMBER(*,0),
"SPARE1" VARCHAR2(128 BYTE)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;
顺便还想问一下,CREATE TABLE "SYSTEM"."AQ$_INTERNET_AGENTS" 中 "SYSTEM"."AQ$_INTERNET_AGENTS"的具体含义
问题已解决。
错误原因:我在将MySQL的sql文件转换到Oracle数据库时,Oracle数据库的ower是system用户,此用户自带AQ$_INTERNET_AGENTS表,此表与创建的表明重复。
解决办法:在转换到Oracle数据库时,应使用新创建的用户,并赋予系统权限。这样新用户下没有AQ$_INTERNET_AGENTS表,就不会产生重复报错了。
反思:谨记,在转换数据库文件时,不能轻易使用数据库自带的系统账户,需自己新创建用户,否则会很麻烦。
另: CREATE TABLE "SYSTEM"."AQ$_INTERNET_AGENTS" 的意思是创建SYSTEM用户下的AQ$_INTERNET_AGENTS表