[Oracle] “表中有數據,但select count(*)的結果為0”問題的解決辦法


一、問題

今天遇到了一個神奇的問題——表中有數據,但select count(*)的結果為0。

這個問題最初的表現形式是“查詢報表沒有分頁”。
最開始還以為是java端的問題。后來才發現,查分頁的sql語句是返回0的。
隨后將該sql語句放到PLSQL里運行,發現也是返回0條。

數據庫版本是 Oracle 11.1.0.6。

試了好幾個搜索引擎,但網上找不到類似情況。

二、山窮水盡疑無路

首先確認一下該表是否有數據——

select * from mytable

可看到該表(mytable)確實有數據。

隨后查詢條數,發現該語句返回0條。

select count(*) from mytable

更換count方式,還是返回0條。

select count(1) from mytable
select count(id) from mytable

三、柳暗花明又一村

隨后發現加上條件時,能查到條數。

select count(*) from mytable where id<10

難道要寫上where才行?
那我要查全表記錄數該怎么辦?

於是嘗試了這種寫法做恆真判斷,但發現還是返回0條——

select count(*) from mytable where 1=1

看來是被數據庫自動優化查詢語句了。

又想了一下,干脆改為主鍵非空判斷吧,這個也是恆真的。

select count(*) from mytable where not id is null

這個能正常的查到記錄數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM