• MYSQL数据迁徙tips,ORA00907: missing right parenthesis


     来历:zhjjava的 Blog 作者:zhjjava的 Blog  




    ">

    这一段时候,公司项目计划是旧数据的迁徙,从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,...)]
    [table_options] [select_statement]

    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相关语法不支持的,以是出现如上错误。

    写出来,以防列位在这个小标题问题上糜费时候.

    另有个觉得就是看标题问题我们不克不及只看表象,表里未必如一,义务如此,糊口生涯亦如此!




    版权声明: 原创作品,许可转载,转载时请务必以超链接编制标明文章 原始因由 、作者信息和本声明。不然将深究法律责任。

  • 相关阅读:
    cocos2d-x学习记录5——CCTransition场景过渡
    cocos2d-x学习记录4——图形绘制
    cocos2d-x学习记录3——CCTouch触摸响应
    cocos2d-x学习记录2——CCAction动作
    cocos2d-x学习记录1——图片显示
    cocos2d-x环境搭建
    自定义CCNode
    cocos2d-x调度器原理
    cocos2d-x动作原理
    cocos2d-x触摸分发器原理
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975815.html
Copyright © 2020-2023  润新知