rt,在oracle中,寫sql時,假設這個欄位為sta char(3),判斷這個字段是否為空一般都是這兩個:sta = '' or sta is null
但是今天這兩種方法失效了,無論是sta = '' 還是sta is null 都無法查詢到那筆記錄。到資料庫一看,該欄位的確為空,但是由於這個欄位是char型別的,所以多了3個空格。
既然有空格那麼用:trim(sta) = '' 這個條件能查到嗎?還是不行。沒辦法了,那麼只能用:sta = ' '(注意中間有個空格) 這個條件能查了,果然能查到。
猜測可能是因為sta欄位是char欄位的原因(char型別在插入的時候如果插入空或者長度不足,會自動新增空格補齊長度)),由於有空格導致需要用 sta = ' ' 來查詢,但我又找了乙個varchar2 型別的字段(varchar2型別的字段在儲存的時候不會自動補齊長度), name varchar2(32),這個空字段就沒有空格了,然後使用:name = '' or name is null or trim(name ) = ''
還是查不到,還是得用 name = 『 』(注意中間有個空格)來查詢。
我的資料庫版本是:10.0.2 在11g也沒有遇見過這種情況,想來是oracle10g的bug,希望大家在判斷字段是否為空的時候使用這種形式:sta = '' or sta is null or trim(sta ) = '' or sta = ' '
避免無法判斷的情況。
ps:還有後續,我後面使用for update 把這個sta欄位清空了,然後使用:sta = '' or sta = ' ' 又不能查詢到這筆記錄了,還得使用:sta is null 才行。
簡直坑。
oracle10g 解除安裝
1 oracle 10g解除安裝軟體環境 1 windows xp oracle 10g2 oracle 安裝路徑為 d oracle 實現方法 1 開始 設定 控制面板 管理工具 服務停止所有 oracle 服務 2 開始 程式 oracle oradb 10g home1 oracle inst...
Oracle10g解除安裝
一 軟體解除安裝 1 windows xp oracle 10g 2 oracle安裝路徑為 d oracle 1 如果資料庫配置了自動儲存管理 asm 應該先刪除聚集同步服務css cluster synchronization services 刪除css服務的方法是在dos命令列中執行如下命令...
解除安裝oracle10g
1.停止所有與oracle相關的服務。2.使用oui oracle universal installer 解除安裝oracle軟體。開始 程式 oracle oradb110g home1 oracle installation product universal installer.3.刪除登錄...