oracle_mysql系统移植方案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

文档名称:BPMONMYSQL系统移植方案严格保密,仅用于BPM项目客户质量团结创新1文档作者:cyt2005提交时间:2007年7月06日系统移植方案Mysql的版本是mysql-5.1.19-win32操作系统是WINXP21.1移植过程中重点问题1.1.1数据类型差异ORACLE数据库和MYSQL数据库在数据类型方面差异比较大,而且数据类型也是一个数据库存储数据的基础,所以找到数据类型之间的对应是整个系统进行移植的基础。以下给出了ORACLEMYSQL数据类型的对应关系。数值类型:NUMBERDECIMAL,精度刻度都不变注:如果是序列用BIGINT字符串类型:VARCHAR2VARCHAR长度不变。LONGLONGTEXT这里有可能遇到的问题是超过主键key长度的问题,根据实际情况适当修改,如果是TEXT类型也需要指名长度,否则建立key会报错日期类型:DATEDATETIMETIMESTAMP(N)TIMESTAMP1.1.2SQL语法差异SEQUENCE:MYSQL没有ORACLE中的SEQUENCE对象,我们在迁移的时候需要特别注意,一般SEQUENCE有两种用途:1、作为表中自增字段的序列号。文档名称:BPMONMYSQL系统移植方案严格保密,仅用于BPM项目客户质量团结创新22、程序中获得自动编号。MYSQL数据类型中存在AUTO_INCREMENT为自增数据类型。我们可以利用该数据类型变通一下来满足我们现有系统中的SEQUENCE功能。1、对于ORACLE中SEQUENCE作为表的自增列一般是通过与触发器绑定实现的,在MYSQL中我们可以直接利用MYSQL的AUTO_INCREMENT类型来实现。2、ORACLE开发的应用程序中直接SELECTSEQUENCT来获得自动编号,对于这个功能我们也可以利用MYSQL的AUTO_INCREMENT类型来实现。首先介绍一个函数,我们可以利用如下函数查询最后一个序列号的值:mysqlSELECTLAST_INSERT_ID();+------------------+|LAST_INSERT_ID()|+------------------+|3|+------------------+1rowinset(0.06sec)我们可以创建一个含有自增列的表,对该表进行INSERT操作后,再利用LAST_INSERT_ID()函数来获得刚刚INSERT的值,也就是相当于ORACLE中的SEQUENCE.NETVAL。也就是INSERT操作+SELECT操作获得一个自动编号。mysqlCREATETABLEMOCHA_BE_SEQUENCE(IDBIGINTNOTNULLPRIMARYKEYAUTO_INCREMENT);QueryOK,0rowsaffected(0.63sec)mysqlINSERTINTOMOCHA_BE_SEQUENCEVALUES(NULL);QueryOK,1rowaffected(0.09sec)mysqlSELECTLAST_INSERT_ID();+------------------+|LAST_INSERT_ID()|+------------------+|1|+------------------+1rowinset(0.05sec)mysqlINSERTINTOMOCHA_BE_SEQUENCEVALUES(NULL);QueryOK,1rowaffected(0.06sec)mysqlSELECTLAST_INSERT_ID();+------------------+|LAST_INSERT_ID()|文档名称:BPMONMYSQL系统移植方案严格保密,仅用于BPM项目客户质量团结创新3+------------------+|2|+------------------+1rowinset(0.00sec)BLOG:ORACLE和MYSQL都支持二进制大对象,数据类型的名称都是BLOB,在存储方面都是一样的,BLOB列没有字符集,并且排序和比较基于列值字节位数;在开发应用程序时需要注意对两种数据库BLOG类型的操作的差异。视图Mysql视图限制(1)SELECT语句不能包含FROM子句中的子查询。(2)SELECT语句不能引用系统或用户变量。(3)SELECT语句不能引用预处理语句参数。(4)在存储子程序内,定义不能引用子程序参数或局部变量。(5)在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECKTABLE语句。(6)在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。(7)在视图定义中命名的表必须已存在。(8)不能将触发程序与视图关联在一起。我所要迁移的系统中的视图90%用到了子查询,解决方案是首先重新写查询语句,尽量避免子查询,避免不了,就将子查询中的内容,单独create成一个新的视图,然后再建立所需要的视图。例子:Oracle中带子查询的视图:CREATEORREPLACEVIEWMOCHA_IM_ALL_ACCOUNT_VIEWASSELECTUSER_IDASID,USER_NAMEASNAME,CONCAT(CONCAT(CONCAT(NVL(ORG.ORG_CODE,'00000001.10000000'),'.00.'),PERSON_POSITION.PERSON_LEVEL),LPAD(PERSON_POSITION.ORG_PERSON_NO,9,'0'))ASCODE,NVL(ORG.ORG_LEVEL,1)ASREC_LEVEL,'PERSON'ASREC_TYPEFROM(SELECTPERSON.USER_ID,PERSON.USER_NAME,NVL(POSITION.ORG_ID,-1)ASORG_ID,NVL(POSITION.ORG_PERSON_NO,0)ASORG_PERSON_NO,NVL(POSITION.PERSON_LEVEL,'64')ASPERSON_LEVELFROMMOCHA_IM_PERSON_POSITIONPOSITION,MOCHA_IM_PERSONPERSONWHEREPERSON.USER_ID=POSITION.USER_ID(+)ANDPERSON.ADMIN_FLAG='0'AndPERSON.STATUS='A')PERSON_POSITION,MOCHA_IM_ORG_VIEWORGWHEREPERSON_POSITION.ORG_ID=ORG.ORG_ID(+)文档名称:BPMONMYSQL系统移植方案严格保密,仅用于BPM项目客户质量团结创新4UNIONALLSELECTUSER_IDASID,USER_NAMEASNAME,'00000001.20000000.00.64000000000'ASCODE,1ASREC_LEVEL,'PERSON'ASREC_TYPEFROMMOCHA_IM_PERSONPERSONWHEREPERSON.ADMIN_FLAG='0'AndPERSON.STATUS='I'UNIONALLSELECTUSER_IDASID,USER_NAMEASNAME,'00000001.30000000.00.64000000000'ASCODE,1ASREC_LEVEL,'PERSON'ASREC_TYPEFROMMOCHA_IM_PERSONWHEREADMIN_FLAG='1'ANDSTATUS='A'UNIONALLSELECTLPAD(ORG_ID,20,'')ASID,ORG_NAMEASNAME,ORG_CODEASCODE,ORG_LEVELASREC_LEVEL,'ORG'ASREC_TYPEFROMMOCHA_IM_ORG_VIEWUNIONALLSELECT'-1'ASID,'未分派人员'ASNAME,'00000001.10000000'ASCODE,1ASREC_LEVEL,'ORG'ASREC_TYPEFROMDUALUNIONALLSELECT'-2'ASID,'待删除人员'ASNAME,'00000001.20000000'ASCODE,1ASREC_LEVEL,'ORG'ASREC_TYPEFROMDUALUNIONALLSELECT'-3'ASID,'系统管理员'ASNAME,'00000001.30000000'ASCODE,1ASREC_LEVEL,'ORG'ASREC_TYPEFromDUAL/转为mysql:CREATEORREPLACEVIEWPERSON_POSITIONASSELECTPERSON.USER_ID,PERSON.USER_NAME,IFNULL(POSITION.ORG_ID,-1)ASORG_ID,IFNULL(POSITION.ORG_PERSON_NO,0)ASORG_PERSON_NO,IFNULL(POSITION.PERSON_LEVEL,'64')ASPERSON_LEVELFROMMOCHA_IM_PERSON_POSITIONPOSITIONLEFTJOINMOCHA_IM_PERSONPERSONONPERSON.USER_ID=POSITION.USER_IDWHEREPERSON.ADMIN_FLAG='0'AndPERSON.STATUS='A';/CREATEORREPLACEVIEWMOCHA_IM_ALL_ACCOUNT_VIEWASSELECTUSER_IDASID,USER_NAMEASNAME,CONCAT(CONCAT(CONCAT(IFNULL(ORG.ORG_CODE,'00000001.10000000'),'.00.'),PERSON_POSITION.PERSON_LEVEL),LPAD(PERSON_POSITION.ORG_PERSON_NO,9,'0'))ASCODE,IFNULL(ORG.ORG_LEVEL,1)ASREC_LEVEL,'PERSON'ASREC_TYPEFROMMOCHA_IM_ORG_VIEWORGLEFTJOINPERSON_POSITIONONPERSON_POSITION.ORG_ID=ORG.ORG_ID文档名称:BPMONMYSQL系统移植方案严格保密,仅用于BPM项目客户质量团结创新5UNIONALLSELECTUSER_IDASID,USER_NAMEASNAME,'00000001.20000000.00.64000000000'ASCODE,1ASREC_LEVEL,'PERSON'ASREC_TYPEFROMMOCHA_IM_PERSONPERSONWHEREPERSON.ADMIN_FLAG='0'AndPERSON.STATUS='I'UNIONALLSELECTUSER_IDASID,USER_NAMEASNAME,'00000001.30000000.00.64000000000'ASCODE,1ASREC_LEVEL,'PERSON'ASREC_TYPEFROMMOCHA_IM_PERSONWHEREADMIN_FLAG='1'ANDSTATUS='A'UNIONALLSELECTLPAD(ORG_ID,20,'')ASID,ORG_NAMEASNAME,ORG_CODEASCODE,ORG_LEVELASREC_LEVEL,'ORG'ASREC_TYPEFROMMOCHA_IM_ORG_VIEWUNIONALLSELECT'-1'ASID,'未分派人员'ASNAME,'00000001.10000000'ASCODE,1ASREC_LEVEL,'ORG'ASREC_TYPEFROMDUALUNIONALLSELECT'-2'ASID,'待删除人员'ASNAME,'00000001.20000000'ASCODE

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功