有很多应用项目, 刚起步的时候用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不能用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 <p><strong><span style="color: #464646;"><span style="font-size: 15pt; color: #0e59c0;"></span><span style="color: #464646;"><strong>4. 长字符串的</strong><strong><span style="color: #3366ff;">处</span><span style="color: #3366ff;">理</span></strong><span style="color: #464646;"><br> </span><span style="color: #464646;">长</span><span style="color: #464646;">字符串的</span><span style="color: #464646;"><span style="color: #3366ff;">处</span><span style="color: #3366ff;">理</span>oracle</span><span style="color: #464646;">也有它特殊的地方。</span><span style="color: #464646;">insert</span><span style="color: #464646;">和</span><span style="color: #464646;">update</span><span style="color: #464646;">时</span><span style="color: #464646;">最大可操作的字符串</span><span style="color: #464646;">长</span><span style="color: #464646;">度小于等于</span><span style="color: #464646;">4000</span><span style="color: #464646;">个</span><span style="color: #464646;">单</span><span style="color: #464646;">字</span><span style="color: #464646;">节</span><span style="color: #464646;">, </span><span style="color: #464646;">如果要插入更</span><span style="color: #464646;">长</span><span style="color: #464646;">的字符串</span><span style="color: #464646;">, </span><span style="color: #464646;">请</span><span style="color: #464646;">考</span><span style="color: #464646;">虑</span><span style="color: #464646;">字段用</span><span style="color: #464646;">clob</span><span style="color: #464646;">类</span><span style="color: #464646;">型,方法借用</span><span style="color: #464646;">oracle</span><span style="color: #464646;">里自</span><span style="color: #464646;">带</span><span style="color: #464646;">的</span><span style="color: #464646;">dbms_lob</span><span style="color: #464646;">程序包。</span><span style="color: #464646;">插入修改</span><span style="color: #464646;">记录</span><span style="color: #464646;">前一定要做</span><span style="color: #464646;">进</span><span style="color: #464646;">行非空和</span><span style="color: #464646;">长</span><span style="color: #464646;">度判断,不能</span><span style="color: #464646;">为</span><span style="color: #464646;">空的字段</span><span style="color: #464646;">值</span><span style="color: #464646;">和超出</span><span style="color: #464646;">长</span><span style="color: #464646;">度字段</span><span style="color: #464646;">值</span><span style="color: #464646;">都</span><span style="color: #464646;">应该</span><span style="color: #464646;">提出警告</span><span style="color: #464646;">,</span><span style="color: #464646;">返回上次操作。</span><br><br><strong>5. 日期字段的</strong><strong><span style="color: #3366ff;">处</span><span style="color: #3366ff;">理</span></strong><br> mysql日期字段分<span style="color: #464646;">date</span><span style="color: #464646;">和</span><span style="color: #464646;">time</span><span style="color: #464646;">两</span><span style="color: #464646;">种</span><span style="color: #464646;">,</span><span style="color: #464646;">oracle</span><span style="color: #464646;">日期字段只有</span><span style="color: #464646;">date</span><span style="color: #464646;">,包含年月日</span><span style="color: #464646;">时</span><span style="color: #464646;">分秒信息,用当前</span><span style="color: #464646;"><span style="color: #3366ff;">数据</span><span style="color: #3366ff;">库</span></span><span style="color: #464646;">的系</span><span style="color: #464646;">统时间为</span><span style="color: #464646;">sysdate, </span><span style="color: #464646;">精确到秒,或者用字符串</span><span style="color: #464646;">转换</span><span style="color: #464646;">成日期型函数</span><span style="color: #464646;">to_date(‘<chsdate isrocdate="false" islunardate="false" day="1" month="8" year="2001">2001-08-01</chsdate>’,’yyyy-mm-dd’)</span><span style="color: #464646;">年</span><span style="color: #464646;">-</span><span style="color: #464646;">月</span><span style="color: #464646;">-</span><span style="color: #464646;">日</span><span style="color: #464646;"> 24</span><span style="color: #464646;">小</span><span style="color: #464646;">时</span><span style="color: #464646;">:</span><span style="color: #464646;">分</span><span style="color: #464646;">钟</span><span style="color: #464646;">:</span><span style="color: #464646;">秒</span><span style="color: #464646;"> </span><span style="color: #464646;">的格式</span><span style="color: #464646;">yyyy-mm-dd hh24:mi:ss to_date()</span><span style="color: #464646;">还</span><span style="color: #464646;">有很多</span><span style="color: #464646;">种</span><span style="color: #464646;">日期格式</span><span style="color: #464646;">, </span><span style="color: #464646;">可以参看</span><span style="color: #464646;">oracle doc.</span><span style="color: #464646;">日期型字段</span><span style="color: #464646;">转换</span>成字符串函数to_char(‘<chsdate isrocdate="false" islunardate="false" day="1" month="8" year="2001">2001-08-01</chsdate>’,’yyyy-mm-dd hh24:mi:ss’)<br><br> <span style="color: #464646;">日期字段的数学运算公式有很大的不同。</span><span style="color: #464646;">mysql</span><span style="color: #464646;">找到离当前</span><span style="color: #464646;">时间</span><span style="color: #464646;">7</span><span style="color: #464646;">天用</span><span style="color: #464646;"> date_field_name > subdate</span><span style="color: #464646;">(</span><span style="color: #464646;">now</span><span style="color: #464646;">(),</span><span style="color: #464646;">interval 7 day</span><span style="color: #464646;">)</span><span style="color: #464646;">oracle</span><span style="color: #464646;">找到离当前</span><span style="color: #464646;">时间</span><span style="color: #464646;">7</span>天用 date_field_name >sysdate - 7;<br><br><strong>6. 空字符的</strong><strong><span style="color: #3366ff;">处</span><span style="color: #3366ff;">理</span></strong><br> mysql的非空字段也有空的内容,<span style="color: #464646;">oracle</span><span style="color: #464646;">里定</span><span style="color: #464646;">义</span><span style="color: #464646;">了非空字段就不容</span><span style="color: #464646;">许</span><span style="color: #464646;">有空的内容。按</span><span style="color: #464646;">mysql</span><span style="color: #464646;">的</span><span style="color: #464646;">not null</span><span style="color: #464646;">来定</span><span style="color: #464646;">义</span><span style="color: #464646;">oracle</span><span style="color: #464646;">表</span><span style="color: #464646;">结</span><span style="color: #464646;">构</span><span style="color: #464646;">, </span><span style="color: #464646;">导</span><span style="color: #464646;">数据</span><span style="color: #464646;">的</span><span style="color: #464646;">时</span><span style="color: #464646;">候会</span><span style="color: #464646;">产</span><span style="color: #464646;">生</span><span style="color: #464646;">错误</span><span style="color: #464646;">。因此</span><span style="color: #464646;">导</span><span style="color: #464646;">数据</span><span style="color: #464646;">时</span><span style="color: #464646;">要</span><span style="color: #464646;">对</span><span style="color: #464646;">空字符</span><span style="color: #464646;">进</span><span style="color: #464646;">行判断,如果</span><span style="color: #464646;">为</span><span style="color: #464646;">null</span>或空字符,需要把它改成一个空格的字符串。<br><br><strong>7. 字符串的模糊比较</strong><br> mysql里用<span style="color: #464646;"> </span><span style="color: #464646;">字段名</span><span style="color: #464646;"> like '%</span><span style="color: #464646;">字符串</span><span style="color: #464646;">%',oracle</span><span style="color: #464646;">里也可以用</span><span style="color: #464646;"> </span><span style="color: #464646;">字段名</span><span style="color: #464646;"> like '%</span><span style="color: #464646;">字符串</span><span style="color: #464646;">%' </span><span style="color: #464646;">但</span><span style="color: #464646;">这种</span><span style="color: #464646;">方法不能使用索引</span><span style="color: #464646;">, </span><span style="color: #464646;">速度不快,用字符串比</span><span style="color: #464646;">较</span><span style="color: #464646;">函数</span><span style="color: #464646;"> instr(</span><span style="color: #464646;">字段名</span><span style="color: #464646;">,'</span><span style="color: #464646;">字符串</span><span style="color: #464646;">')>0 </span><span style="color: #464646;">会得到更精确的</span><span style="color: #464646;">查</span><span style="color: #464646;">找</span><span style="color: #464646;">结</span>果。<br><br><strong>8. 程序和函数里,操作</strong><strong><span style="color: #3366ff;">数据</span><span style="color: #3366ff;">库</span></strong><strong>的工作完成后请注意结果集和指针的释放。</strong></span></span></strong></p>