疫情期間,有乙個老專案要從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...