oracle遷移mysql 遇到的一些坑

2021-10-03 07:31:35 字數 3457 閱讀 8559

疫情期間,有乙個老專案要從oracle遷移到mysql, 其中碰到了一些坑,在此做個記錄和大家分享一下

老專案中oracle主鍵id都是使用sequence,在mysql中自然得使用自增主鍵,這塊主要朋友的問題是,在老專案中使用的dao層框架是springjdbc,再插入資料庫中,有時需要返回插入的主鍵id,oracle資料庫一般都是,先查詢nextval().再執行插入資料,在mysql中則不行,在springjdbc中使用keyholder,可以返回自增id。

oralce返回主鍵id**

id = jdbctemplate.queryforobject("select seq_table.nextval from dual",long.class);
mysql返回主鍵id**

springjdbc通過keyholder返回資料id

keyholder keyholder = new generatedkeyholder();

final string sql = "insert into ttablefo(provincecode,fileseq,vendorcode,fileversion," +

"filelength,filetime,keyindex,extension1,extension2,create_time) values(?,?,?,?,?,?,?,?,?,now())";

object args =

},keyholder);

long id = keyholder.getkey().intvalue();

oralce 涉及到時間一般都都使用sysdate,mysql中一般使用sysdate()/now()

oracle**

insert into t_bis_agentit(staffid,verifytime,inserttime) values (?,?,sysdate)
mysql**

now()
oracle支援遞迴查詢,而mysql根本沒有類似的關鍵字,所以在查詢中只能通過**去實現遞迴查詢

oracle**

select

*from

(select

*from t_sys_menu_item order

by menu_item_id asc

) m start

with m.pid=

0connect

by prior m.menu_item_id= m.pid

oracle 巢狀查詢中只需用用括號括起來不需要將子查詢作別名,而在mysql中你可能會遇到這樣的報錯

you can』t specify target table 『表名』 for update in from clause

oracle**

update result 

set studentresult=studentresult+

5where studentresult in((

select res.studentresult

from student stu

join result res on res.studentno=res.studentno

where res.studentresult=

53and stu.gradeid=

(select gradeid

from grade

where gradename=

'大一'))

)

mysql**

update result 

set studentresult=studentresult+

5where studentresult in

(select a.studentresult from

(select res.studentresult

from student stu

join result res on res.studentno=res.studentno

where res.studentresult=

53and stu.gradeid=

(select gradeid

from grade

where gradename=

'大一'))

as a

)

也就是說:把結果集當作乙個表,自我查詢一遍

格式為:select a.studentresult from

(結果集)a

oracle中一般使用to_char()/to_date()進行時間和字串之間的轉換,而在mysql中一般使用dateformat()

oracle**

to_char(written_ack_time,

" + "

'yyyy-mm-dd hh24:mi:ss'

)

mysql**

date_format(written_ack_time,

'%y-%m-%d %h:%i:%s'

)

nvl 函式和ifnull 函式都用來判斷是否為空指標,其中nvl函式是oracle的函式,ifnull函式是mysql的函式

oracle函式

select

case

when

(t.op_type =

'2'and nvl(t.rps_role,

'0')

='0'

)then ")

;

mysql函式

select

case

when

(t.op_type =

'2'and ifnull(t.rps_role,

'0')

='0'

)

oracle 刪除語句沒有沒有關鍵字 from mysql刪除語句關鍵字必須使用from

oracle語句

delete tablename where a =

2

mysql語句

delete

from tablename where a =

Oracle遷移到MySQL總結

日期 2012 06 01 字型 大中小 這兩個星期裡一直都在忙於一件事兒,就是oracle資料庫的遷移問題。沒有做的時候感覺這是一件十分輕鬆的事兒,可是等到實實在在去做去實現的時候,自己傻眼了。這種糾結啊,在這裡先說下遇到的問題 1。資料庫的表結構問題 資料型別不同需要解決varchar2 var...

Oracle與MySQL遷移語法相容

最近專案上使用oracle的系統,需要相容mysql,原本使用到的sql語法需要修改以相容到mysql。先記錄下目前遇到的問題,後續會繼續更新。1,oracle nvl 這個函式用的比較多,功能就是從兩個表示式返回乙個非 null 值,mysql ifnull expr1,expr2 也有相同功能 ...

將MySQL資料遷移到Oracle

因為專案的原因,今晚將mysql資料庫的內容嘗試遷移到oracle,雖然結果失敗,不過學到了不少,下次就不一定了,哈哈 因為之前專案是使用mysql資料庫的,現在因為新公司要求使用oracle 公司大得很 不得不嘗試將以前專案進行遷移。經過查詢相關文件,最終選定使用oracle sql develo...