從oracle遷移數據到達夢後,發現數據庫默認值都丟失了。因而我想從oracle數據庫將默認值查出來,在達夢數據庫加回去。
因而上網查了一下,看怎麼獲取oracle數據庫字段默認值信息,找到了這個sql。
select t.column, t.data_type, t.data_length, t.nullable, t.data_default from USER_TAB_COLS t where TABLE_NAME = 'AA'
但把sql拿到數據庫跑時卻發現有問題,報了一個錯:
程序員
粗略掃了一下報錯信息,沒看懂錯在哪裏。這跟咱們平時碰上程序bug,但日誌不清晰,看問題在哪是同樣的。 看了一下sql,主要有三部分,select,from語句(user_tab_cols是一個視圖),還有where條件,錯誤多是select部分,或者user_tab_cols視圖語句或者是where條件語句形成的,但不知道是哪一部分出錯。
因而我先嚐試把where條件去掉,看還會不會報錯。
sql
結果仍是同樣的錯,那說明錯誤位置應該不在where條件裏面,那繼續嘗試縮小範圍。
此次我一步到位,把sql簡化成只有一個元素:表名
數據庫
發現能夠查詢成功,那應該在select語句裏面。 看查詢有多個字段,暫時不知道是哪一個字段有問題,嘗試刪除後面一半。
這時發現問題還在,那應該是前面兩個字段有問題。繼續刪除一個字段再試。
這時仍是報錯,但錯誤範圍已經很小了。熟悉oracle的人一看就應該能知道column是關鍵字,這裏應該是字段名寫錯了。(後來發現正確字段名應該是column_name) 若是這時還想不起來錯誤緣由怎麼辦?——繼續刪減。看我下面的操做,刪除別名t
刪除到這裏,發現仍是報錯,但錯誤提示不同了。這時再上網查一下,關於oracle的column信息,會在百度發現不少相關內容。這時有必定編程經驗的人應該確定能回憶起來。
發現問題後,修改好,如今能夠正常查出默認值了。
編程
這裏展現了一種程序員查bug的思路,就是不斷減小可能致使報錯的內容,直到錯誤不復現(或者錯誤發生變化),問題足夠簡單,能夠一眼瞭然知道緣由。
經過減小變量,逐步增長肯定性,這是一種程序員查bug的思路。還有一種思路是倒過來,從一個最簡的系統,逐步增長變量,最近肯定問題,之後有機會再分享案例。oracle
留一個小思考題:若是第一步刪除了where條件後,發現sql不報錯了。應該怎麼查?
若是發現只有where條件跟select字段同時保留才報錯,單獨修改字段或者刪除where條件不報錯,又該怎麼查?3d