谈谈你对oracle的认识,对Oracle存储过程的几点认识
1、寫Oracle存儲過程時最好不要在其中寫Commit語句。一般調(diào)用程序會自動Commit數(shù)據(jù),比如用NHibernate調(diào)用的時候,NHibernate就會自動Commi
1、寫Oracle存儲過程時最好不要在其中寫Commit語句。
一般調(diào)用程序會自動Commit數(shù)據(jù),,比如用NHibernate調(diào)用的時候,NHibernate就會自動Commit數(shù)據(jù)。如果寫了,會造成NHibernate調(diào)用完存儲過程之后拋出錯誤。
2、重視Count的特殊比較作用。
在一個Select語句中,用Count對不同的字段進行統(tǒng)計,如果某行數(shù)據(jù)中被統(tǒng)計字段值為null,不會計入該字段統(tǒng)計值。利用這一點可以進行多表關(guān)聯(lián)統(tǒng)計,比較數(shù)據(jù)的一致性。
例如:
Select Count(dmc.id) dmcCnt, Count(dmp.id) dmpCnt,
Count(Case dmp.type When 1 Then 1 Else null End) dmp2, Count(dmt.id) dmtCnt
Into i_Count1, i_Count2, i_Count3, i_Count4
From dmc
left join dmp on dmp.id = dmc.dmpid
and dmp.procdoctimestamp = dmc.procdoctimestamp
left join dmt on dmt.dmpid = dmp.id
3、通過關(guān)聯(lián)數(shù)據(jù)更新一個表時,要注意關(guān)聯(lián)數(shù)據(jù)的唯一性。
例如:
update (
select dmu.cu, dmu.lmt,
dmcl.cu cu1, dmcl.lmt lmt1
from dmu, dmcl, dmp
where dmu.id = dmp.dmuid
and dmcl.dmpid = dmproc.id
and dmcl.id = dmu.dmclid
)
Set cu = cu1,
lmt = lmt1;
此語句中的dmu表中必須要有dmcl表的主關(guān)鍵字段才可以唯一確定cu1和lmt1的值,否則Oracle會認(rèn)為你使用多條數(shù)據(jù)更新一條數(shù)據(jù),那樣是不允許的。有一些朋友使用一個表的數(shù)據(jù)更新另一個表的數(shù)據(jù)失敗(ora-01779)常常是這個原因。
本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請點擊此處反饋版權(quán)投訴
本文系統(tǒng)來源:php中文網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的谈谈你对oracle的认识,对Oracle存储过程的几点认识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle分页查询加总数,oracle
- 下一篇: oracle 事务未正常回滚,Sprin