分类: Mysql/postgreSQL
2008-05-24 21:02:06
|
">
这一段时间,项目计划是旧数据的迁移,从MYSQL迁移至ORACLE,开了无数次会,讨论了若干次。 错误现象: 在从MYSQL导出sql脚本后,在oracle相关工具里执行创建表的sql时,如下,有所删改: CREATE TABLE TEST_TBL ( 报错: The following error has occurred: ORA-00907: missing right parenthesis 开始觉得莫明奇妙,已经将相关数据类型改了,还报这个错,很郁闷,浪费了足足有30分钟,搞这事,搞定后,遂想写下此文。 MYSQL ver :4.0.17,ORACLE:9i,这个问题与版本关系不大,只是从严谨角度出发,还是提供一下版本. 错误原因在于: 字段定义: name varchar2(16) NOT NULL default '''''''' oracle的create table语法: CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( 意味着,字段给定默认值,default value 应该在[ column_constraint [, ... ] 之前,name字段定义应该是:name varchar2(16) default '''''''' NOT NULL 再看MYSQL create table的语法: 另外还有一点,无论是用mysqldump命令,还是用PHP提供的一个工具(选择导出为ORACLE格式),他们导出的表的定义SQL中,default value的位置都是在"NOT NULL/NULL"之后,而这是ORACLE相关语法不支持的,所以出现如上错误。 写出来,以防各位在这个小问题上浪费时间. 还有个感觉就是看问题我们不能只看表象,表里未必如一,工作如此,亦如此! |