这一段时间,公司项目计划是旧数据的迁移,从MYSQL迁移至ORACLE,开了无数次会,讨论了若干次。
错误现象:
在从MYSQL导出sql脚本后,在oracle相关工具里执行创建表的sql时,如下,有所删改:
CREATE TABLE TEST_TBL (
id NUMBER (6) NOT NULL ,
name varchar2(16) NOT NULL default '',
tel varchar2(16) NOT NULL default '',
CONSTRAINT PK_ID
PRIMARY KEY ( id )) ;
报错:
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 (
{ column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ]
| table_constraint } [, ... ]
).....
意味着,字段给定默认值,default value 应该在[ column_constraint [, ... ] 之前,name字段定义应该是:name varchar2(16) default '' NOT NULL
再看MYSQL create table的语法:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
MYSQL中的语法定义是,default_value 写在"NOT
NULL/NULL"之后,当然实际上在MYSQL里创建表时,default_value的值也可以在"NOT
NULL/NULL"之前,之前之后都是无关的,都可以正确创建表,但在ORACLE中是严格按照语句定义来检验的,所以同样的语句(改相关字段类型后)
在oracle中报错!
另外还有一点,无论是用mysqldump命令,还是用PHP提供的一个工具(选择导出为ORACLE格式),他们导
出的表的定义SQL中,default value的位置都是在"NOT
NULL/NULL"之后,而这是ORACLE相关语法不支持的,所以出现如上错误。
写出来,以防各位在这个小问题上浪费时间.
还有个感觉就是看问题我们不能只看表象,表里未必如一,工作如此,生活亦如此
分享到:
相关推荐
使用hibernate注解,必须要使用库hibernate-commons-annotations,hibernate-core,hibernate-jpa,ejb3-persistence,javassist等
hibernate注解说明文档,hibernate注解说明文档
Hibernate 注解的说明文档,有pdf和html.工具类文档
Hibernate注解用法总结
Hibernate注解jar包 介绍:Hibernate Annotations注解使用的jar包。
hibernate注解中英文版 hibernate注解中英文版 hibernate注解中英文版 hibernate注解中英文版
Hibernate注解API.pdfHibernate注解API.pdfHibernate注解API.pdf
hibernate注解详解
Hibernate注解大全
ssh框架构建 hibernate spring都使用注解
每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明。 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id;...
Spring+Hibernate注解声明式事务实例
hibernate注解配置
hibernate 注解 一对多,多对一,多对多,注解解释
springmvc+hibernate框架整合 demo 都是注解完成
* 3.hilo 要在数据库中建立一张额外的表,默认表名为hibernate_unque_key,默认字段为integer类型,名称是next_hi(比较少用) * 例:@GeneratedValue(generator = "paymentableGenerator") * @GenericGenerator...
Hibernate注解详解(超全面不解释).pdf
hibernate 注解 annotation 教程
hibernate注解 1.级联关系 2.增删改查 3.二级缓存 4.日志配置 5.注解解析