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

weixin_33686714發表於2018-08-11

一、問題

今天遇到了一個神奇的問題——表中有資料,但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

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

相關文章