Oracle 快速獲取表欄位數量:USER_TAB_COLUMNS 兩種查詢模式
場景痛點
表欄位過多 (數十/上百) 時,手工計數極其低效且易錯。

方法一:COUNT(*) 統計行數 (推薦)
SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER('表名');
- 語義清晰:直接統計該表在數據字典中的欄位記錄數
- 不受欄位刪除/重建導致 COLUMN_ID 不連續影響
- 適用於所有場景,結果最準確
方法二:MAX(COLUMN_ID) 取最大列序號
SELECT MAX(COLUMN_ID) FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER('表名');
- 原理:COLUMN_ID 為欄位創建順序序號 (1,2,3...)
- 缺陷:若中間刪除過欄位再新增,COLUMN_ID 會出現間隙,MAX 值 > 實際欄位數
- 僅在從未執行過 DROP COLUMN 的表上結果正確
最佳實踐建議
統一使用 COUNT(*) 方法,語義明確、結果可靠、無副作用。MAX(COLUMN_ID) 僅作輔助參考或極簡場景使用。