基于mysql的shiro項(xiàng)目轉(zhuǎn)oracle數(shù)據(jù)庫(kù)
1、問(wèn)題說(shuō)明
改造以前的一個(gè)shiro項(xiàng)目,以前數(shù)據(jù)庫(kù)用的mysql,要更改成oracle,記錄下,希望能幫到有需要的朋友。
2、解決方案
因?yàn)閿?shù)據(jù)庫(kù)中表結(jié)構(gòu),也就6個(gè)張表(5個(gè)權(quán)限表+一個(gè)日志表),原方案是想根據(jù)數(shù)據(jù)庫(kù)字段,轉(zhuǎn)到pownerdesigner中,然后再轉(zhuǎn)出來(lái),后來(lái)發(fā)現(xiàn)太麻煩放棄了。
2.1 使用navicat premium
(1)通過(guò)navicat premimum 連接oracle數(shù)據(jù)庫(kù)。

(2) 選中數(shù)據(jù)庫(kù),右鍵選中轉(zhuǎn)儲(chǔ)SQL文件,然后選擇僅結(jié)構(gòu),就能導(dǎo)出oracle建表sql了。

2.2 oracle sql 與mysql的不同點(diǎn)
(1)cancat函數(shù),連接字符串。
mysql中可以連接多個(gè)字符串;oracle只能連接兩個(gè),需要連接多個(gè)的話,oracle中需要做嵌套。
mysql中:
SELECT count(0) FROM sys_user su_a LEFT JOIN sys_user su_b ON su_b.id = su_a.create_id LEFT JOIN sys_user su_c ON su_c.id = su_a.update_id WHERE su_a.deleted = 1 AND su_a.username LIKE concat('%', '老王', '%');
在oracle中執(zhí)行
報(bào)錯(cuò)信息:

網(wǎng)上說(shuō)明:

軟件老王真實(shí)使用情況,oracle中多個(gè)concat嵌套:

mybatis中使用:

(2)oracle中不能執(zhí)行insert values插入多條記錄。

(3)通過(guò)navivat或者pownerdesiner導(dǎo)出的oracle建表語(yǔ)句,需要把雙引號(hào)或者單引號(hào)替換為空,否則會(huì)出現(xiàn)大小寫(xiě)問(wèn)題,導(dǎo)致一些不必要的問(wèn)題。
(4)給oracle中表字段設(shè)置默認(rèn)值
導(dǎo)出的后默認(rèn)值可能會(huì)沒(méi)了,假如沒(méi)有了,需要設(shè)置下。
如下:alter table 表名稱 modify 字段名 default 具體值;
例如:alter table sys_user modify status default 1;
(5)老shiro項(xiàng)目中,沒(méi)有用到自增主鍵,用的邏輯主鍵,所以沒(méi)有主鍵問(wèn)題,假如用到mysql項(xiàng)目中用到自增主鍵的朋友,還是有些問(wèn)題的,mysql可以直接設(shè)置自增主鍵,oracle中需要新建sequence。
更多信息請(qǐng)關(guān)注公眾號(hào):「軟件老王」,關(guān)注不迷路,軟件老王和他的IT朋友們,分享一些他們的技術(shù)見(jiàn)解和生活故事。
