日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql换成oracle_从mysql转换到oracle数据库

發(fā)布時(shí)間:2023/12/10 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql换成oracle_从mysql转换到oracle数据库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近做了幾個(gè)項(xiàng)目,我對(duì)項(xiàng)目的要求(有些也是客戶的要求)都是既要能用mysql數(shù)據(jù)庫(kù),又要能用oracle數(shù)據(jù)庫(kù),開發(fā)時(shí)盡量用mysql,等到發(fā)布時(shí)要求兩者都能適應(yīng)。因?yàn)閮煞N數(shù)據(jù)庫(kù)還是許多具體的應(yīng)用有些不同,而我們開發(fā)中采用的技術(shù)又有各種,所以基本上都是采用手動(dòng)去轉(zhuǎn)換,具體轉(zhuǎn)換過(guò)程如下:

一、分表結(jié)構(gòu)及表數(shù)據(jù)兩次導(dǎo)出。一次導(dǎo)出去轉(zhuǎn)換之后導(dǎo)入oracle中比較麻煩,所以我們一般在mysql導(dǎo)出時(shí)將導(dǎo)出分成個(gè)結(jié)構(gòu)及個(gè)數(shù)據(jù)兩次導(dǎo)出。導(dǎo)出之后將個(gè)結(jié)構(gòu)語(yǔ)句修改,具體修改如下:

二、對(duì)表的修改:

0、去掉`,`這個(gè)是mysql的特殊標(biāo)示符,轉(zhuǎn)換前要去掉

1、將所有的text替換成varchar2(4000)。有些轉(zhuǎn)換工具將text是轉(zhuǎn)換成blob或clob,我覺得那樣不好,一般還是轉(zhuǎn)換成varchar2(2000)或varchar2(4000)比較好。雖然采用spring或oracle10g可以clob當(dāng)作string去處理,但是我覺得一般情況下還是轉(zhuǎn)換成varchar2比較好,如果字段內(nèi)容確實(shí)需要更長(zhǎng)(varchar2最長(zhǎng)是4000),在這種情況下采用clob就比較好了。

2、將所有的varchar替換成 varchar2 。

3、將tinyint(1)替換成number(1)。

4、將int(4)替換成number(4)。

5、去掉auto_increment選擇項(xiàng)。oracle中沒有自增屬性,所以要去掉。

6、將NOT NULL default ''替換成default '' NOT

NULL。關(guān)鍵是這兩個(gè)的順序不能錯(cuò),也不知道為什么,實(shí)際中總結(jié)出來(lái)的。

7、將ON DELETE CASCADE ON UPDATE CASCADE替換成ON DELETE CASCADE ON

UPDATE CASCADE。

8、將外鍵前的KEY cq_formid (cq_formid)去掉。

9、將CONSTRAINT 0_99 FOREIGN改成CONSTRAINT fk_99 FOREIGN。

10、將mediumblob轉(zhuǎn)換成blob。

11、將所有非主鍵的not null去掉。

12、將外鍵全部移到最后(在數(shù)據(jù)導(dǎo)完之后再執(zhí)行)。

三、對(duì)數(shù)據(jù)修改:

0、去掉`,`這個(gè)是mysql的特殊標(biāo)示符,轉(zhuǎn)換前要去掉,在做個(gè)結(jié)構(gòu)轉(zhuǎn)換時(shí)也要去掉。

1、\'替換成''。\為mysql的轉(zhuǎn)義字符,而oracle的轉(zhuǎn)義字符為單引號(hào)。

2、?替換成?。這種是在執(zhí)行sql插入語(yǔ)句一些特殊字符被oracle當(dāng)做參數(shù),這種我還沒有找到好的處理方法,一般就還是輸入相應(yīng)的字符吧。有誰(shuí)知道更好的處理方法可以告訴我一下。

3、,'',替換成,''''。這也是需要轉(zhuǎn)義引起的。

在程序處理中mysql與oracle數(shù)據(jù)庫(kù)還有些具體的不同,具體的不同情況如下:

mysql與oracle的不同:

1、mysql自動(dòng)增量。oracle中沒有自動(dòng)增量,一般采用序列去實(shí)現(xiàn)類似功能,但是需根在程序中特殊處理(采用hibernate時(shí)不需要特殊處理)。

2、limit。在mysql中一般采用limit去實(shí)現(xiàn)分頁(yè)功能,而oracle中一般采用rownum去實(shí)現(xiàn)分頁(yè)。

3、date。兩種數(shù)據(jù)庫(kù)對(duì)date的處理也不一樣,mysql中更加靈活吧。

4、LEFT函數(shù)。oracle中沒有相同的函數(shù),我一般自定義一個(gè)left函數(shù)去實(shí)現(xiàn)mysql相同的功能,那樣就不用去修改程序了。

oracle中增加:

create or replace function LEFT(String1 in varchar2, pos in

integer)

return varchar2 is

begin

return(substr(String1, 0, pos));

end LEFT;

/

5、空與空串。mysql中空與空串是兩個(gè)不同的東西,而在oracle中將null與空串做了同樣的處理,這也是在程序中需要注意的于方。

6、rs.isLast()。當(dāng)數(shù)據(jù)庫(kù)為mysql在Connection.prepareStatement(str1);可用,而在oracle中必須Connection.prepareStatement(str1,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)才能使用rs.isLast(),一般兩種情況都采用后面的就可以了吧。

7、在oracle中update fieldsdisplaymode f set

f.fdm_displaycontent=Translate(f.fdm_displaycontent,'\'',''''

);這是將insert語(yǔ)句中的\'全部替換成'',還是一種語(yǔ)義的轉(zhuǎn)換。

8、sysdate。在mysql中采用sysate()而在oracle中采用的是sysdate,兩個(gè)稍有不同,也可以在oracle中定義函數(shù)去處理。

總結(jié)

以上是生活随笔為你收集整理的mysql换成oracle_从mysql转换到oracle数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。