佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > oracle取數(shù)據(jù)庫(kù)中最新的一條數(shù)據(jù)可能會(huì)遇到的bug(兩種情況)

oracle取數(shù)據(jù)庫(kù)中最新的一條數(shù)據(jù)可能會(huì)遇到的bug(兩種情況)

熱門(mén)標(biāo)簽:網(wǎng)站排名優(yōu)化 地方門(mén)戶網(wǎng)站 百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) AI電銷 Linux服務(wù)器 服務(wù)外包 呼叫中心市場(chǎng)需求

記一次 開(kāi)發(fā)中遇到的坑:

第一種情況 rowid

select * from table where rowid=(select max(rowid) from table )

這種方式是取最大的rowid作為最新的數(shù)據(jù),但是有一個(gè)隱患 :數(shù)據(jù)庫(kù)一旦有刪除操作,rowid不能保證每次都是遞增的!即max(rowid)并不一定就是最新的數(shù)據(jù),盡管可能不會(huì)每次復(fù)現(xiàn) 但這個(gè)問(wèn)題是絕對(duì)存在的!

第二種情況 使用rownum (或相同思路)

select t.* from (select ti.sysno,ti.cr_date from t_insurance ti order by ti.selldatetime desc ) t where rownum = 1 

這有很大一個(gè)問(wèn)題,如果排序字段數(shù)據(jù)庫(kù)使用的是date類型,而且存在時(shí)分秒剛好相同的數(shù)據(jù)(尤其高并發(fā)項(xiàng)目中),我們子查詢語(yǔ)句中 的確可以準(zhǔn)確的 order by desc出來(lái),但是一旦外層套了一層select ,查出來(lái)的很可能就不是子查詢里面的第一條數(shù)據(jù),詳細(xì)如圖:
11:35:25存在兩條數(shù)據(jù) 執(zhí)行選中的查詢sql,

但是 當(dāng)我們加了一層select,可以看到 已經(jīng)不是上面的第一條數(shù)據(jù)了

類似的,不管怎么寫(xiě)的花里胡哨,如下sql,子查詢里面 row_row = 1時(shí),sysno確實(shí)為3126 1018 0001 5Z14,但是外面套了一層select 結(jié)果也變了

 select * from
(select t.sysno,
  t.cr_date,
  row_number() over(order by t.cr_date desc) row_row from t_insurance t) 
  where row_row = 1

同理 用with temp as 也是一樣的情況,取不到最新的結(jié)果。

解決方法:

暫時(shí)沒(méi)有從寫(xiě)什么高級(jí)的sql語(yǔ)句層面想到好的辦法,(如果有大佬有好的方法,希望可以指點(diǎn)一二)

提供一些思路:如果項(xiàng)目沒(méi)有上生產(chǎn) 或者說(shuō)是小項(xiàng)目,那還可以追加自增列,或者數(shù)據(jù)庫(kù)使用時(shí)間戳類型,但是上了生產(chǎn) 改動(dòng)數(shù)據(jù)庫(kù)是大忌。

一般的,數(shù)據(jù)表中還會(huì)有其它的字段可以作為輔助排序,例如一段時(shí)間內(nèi)的單號(hào)是遞增的 那么可以多個(gè)字段排序 例如 order by date desc,orderNo desc ,(我是通過(guò)這種方式解決的,但還是不治根 萬(wàn)一哪天遇到數(shù)據(jù)庫(kù)沒(méi)其他輔助排序字段 問(wèn)題還是得不到解決)

實(shí)在不行 就根據(jù)實(shí)際業(yè)務(wù) 看看能不能對(duì)時(shí)間加限制(如果數(shù)據(jù)量不大 不加也罷),select * from table where date >=xxxx order by desc date ,然后把一堆數(shù)據(jù)查詢出來(lái),在代碼里面list.get(0)取出第一條數(shù)據(jù)。

到此這篇關(guān)于oracle取數(shù)據(jù)庫(kù)中最新的一條數(shù)據(jù)可能會(huì)遇到的bug的文章就介紹到這了,更多相關(guān)oracle取數(shù)據(jù)庫(kù)中最新的一條數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • zabbix agent2 監(jiān)控oracle數(shù)據(jù)庫(kù)的方法
  • Python查詢oracle數(shù)據(jù)庫(kù)速度慢的解決方案
  • ORACLE數(shù)據(jù)庫(kù)對(duì)long類型字段進(jìn)行模糊匹配的解決思路
  • 配置python連接oracle讀取excel數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)的操作流程
  • SpringBoot多數(shù)據(jù)庫(kù)連接(mysql+oracle)的實(shí)現(xiàn)
  • 使用zabbix監(jiān)控oracle數(shù)據(jù)庫(kù)的方法詳解
  • Oracle數(shù)據(jù)庫(kù)下載與安裝的完整步驟
  • QT連接Oracle數(shù)據(jù)庫(kù)并實(shí)現(xiàn)登錄驗(yàn)證的操作步驟
  • 使用IDEA對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單增刪改查操作
  • Oracle數(shù)據(jù)庫(kù)scott用戶創(chuàng)建view視圖權(quán)限的操作方法
  • ORACLE數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)的三十個(gè)注意事項(xiàng)

標(biāo)簽:蘭州 湘潭 衡水 崇左 黃山 湖南 銅川 仙桃

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《oracle取數(shù)據(jù)庫(kù)中最新的一條數(shù)據(jù)可能會(huì)遇到的bug(兩種情況)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    耿马| 荣成市| 江口县| 中西区| 龙游县| 三江| 望城县| 萨嘎县| 长垣县| 通渭县| 东兰县| 抚顺市| 平谷区| 泸溪县| 朝阳市| 广东省| 桃源县| 延安市| 东丽区| 永丰县| 普安县| 德清县| 卢龙县| 横山县| 府谷县| 岑巩县| 丽水市| 尚志市| 建宁县| 舟山市| 双柏县| 马鞍山市| 蒙自县| 鹿泉市| 宁安市| 灌阳县| 江阴市| 霍山县| 贵港市| 寻甸| 余姚市|