MYSQL到ORACLE法式迁移的细致事变

 起原:赛迪网 作者:余枫  




 有良多使用项目, 刚起步的时分用MYSQL数据库根基上能完成各种结果需求,跟着使用用户的增多,数据量的增添,MYSQL逐阵势泛起不堪重负的景遇:衔接很慢乃至宕机,于是就有把数据从MYSQL迁到ORACLE的需求,使用法式也要相应做一些批改。自己总结出以下几点细致事变,希望对人人有所帮忙。

1. 自动增添的数据范例处理奖励
    MYSQL有自动增添的数据范例,拔出记载时不消利用此字段,会自动得到数据值。ORACLE没有自动增添的数据范例,必要建立一个自动增添的序列号,拔出记载时要把序列号的下一个值赋于此字段。

    CREATE SEQUENCE 序列号的称呼 (最好是表名 序列号标识表记标帜) INCREMENT BY 1  START  WITH  1 MAXVALUE  99999  CYCLE  NOCACHE;
    其中最大的值按字段的长度来定, 假使界说的自动增添的序列号 NUMBER(6) , 最大值为999999
    INSERT 语句拔出这个字段值为: 序列号的称呼.NEXTVAL

2. 单引号的处理奖励
    MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在拔出和批改字符串前必需做单引号的交换:把一切泛起的一个单引号交换成两个单引号。

3.  翻页的SQL语句的处理奖励
    MYSQL处理奖励翻页的SQL语句比较庞大,用LIMIT 起头位置, 记载个数;PHP里还可以用SEEK定位到了局集的位置。ORACLE处理奖励翻页的SQL语句就比较繁琐了。每个了局集只需一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不克不及用ROWNUM>80。
    以下是经由解析后较好的两种ORACLE翻页SQL语句( ID是独一关键字的字段名 ):
    语句一:
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;
 
    语句二:
SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;

4. 长字符串的处理奖励
    长字符串的处理奖励ORACLE也有它分外的处所。INSERT和UPDATE时最大可利用的字符串长度小于便是4000个单字节, 假使要拔出更长的字符串, 请思索字段用CLOB范例,要领借用ORACLE里自带的DBMS_LOB法式包。拔出批改记载前肯定要做进行非空和长度武断,不克不及为空的字段值和凌驾长度字段值都应该提出告诫,前去前次利用。

5.  日期字段的处理奖励
    MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只需DATE,包孕年月日时分秒信息,用以后数据库的细碎年光为SYSDATE, 正确到秒,可能用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日 24小时:分钟:秒 的款式YYYY-MM-DD HH24:MI:SS TO_DATE()尚有良多种日期款式, 可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’)

    日期字段的数学运算公式有很大的差别。MYSQL找到离以后年光7天用 DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离以后年光7天用 DATE_FIELD_NAME >SYSDATE - 7;

6.  空字符的处理奖励
    MYSQL的非空字段也有空的内容,ORACLE里界说了非空字段就不容许有空的内容。按MYSQL的NOT NULL来界说ORACLE表结构, 导数据的时分会孕育爆发错误。因而导数据时要对空字符进行武断,假使为NULL或空字符,必要把它改成一个空格的字符串。

7. 字符串的恍惚比较
   MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种要领不克不及使用索引, 速度不快,用字符串比较函数 instr(字段名,'字符串')>0 会得到改正确的查找了局。

8. 法式和函数里,利用数据库的任务完成后请细致了局集和指针的开释。




版权声明: 原创作品,容许转载,转载时请务必以超链接形式标明文章 原始理由 、作者信息和本声明。不然将清查功令责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1975804.html