曾經一段時間內寫sql語句時,總是莫名其妙的報ora-01722。
對於這個錯誤提示,尤爲是對於一個複雜的sql語句,非常鬱悶,由於不少時候都不知所然。
經過每次碰到的總結,其實也不是那麼難以解決的,主要緣由是:
一、對於兩個類型不匹配(一個數字類型,一個非數字類型,同下)的值進行賦值操做;
二、兩個類型不匹配的值進行比較操做(例如,「=」);
三、to_number函數中的值,非數字的,好比,to_number('a')確定是不行的,to_number('12306')則是正常的。sql
要避免這些問題,要作到在寫sql語句時就好認真處理好不一樣類型的問題。
好比若是要比較的話,同時都用to_number強制轉換(to_number(字段a) = to_number(字段b)),
或者同時轉換爲字符串類型(字段a||'' = 字段b||'',都鏈接一個空字符串使之變成字符串類型)。ide
在語句中使用to_number函數時,要保證值必定是數字格式,或者寫好異常處理。函數
當咱們碰到這個錯誤提示時,就從全部用到的數字類型的字段開始檢查,逐一排查,從而解決問題。spa