有很多應用項目, 剛起步的時候用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>