<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          從一條sql報(bào)錯(cuò)解決過程學(xué)習(xí)程序員查bug的思路

          共 1247字,需瀏覽 3分鐘

           ·

          2021-06-24 08:24

          公眾號(hào)關(guān)注 “GitHub今日熱榜
          設(shè)為 “星標(biāo)”,帶你挖掘更多開發(fā)神器!







          從oracle遷移數(shù)據(jù)到達(dá)夢(mèng)后,發(fā)現(xiàn)數(shù)據(jù)庫默認(rèn)值都丟失了。于是我想從oracle數(shù)據(jù)庫將默認(rèn)值查出來,在達(dá)夢(mèng)數(shù)據(jù)庫加回去。


          于是上網(wǎng)查了一下,看怎么獲取oracle數(shù)據(jù)庫字段默認(rèn)值信息,找到了這個(gè)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拿到數(shù)據(jù)庫跑時(shí)卻發(fā)現(xiàn)有問題,報(bào)了一個(gè)錯(cuò):



          粗略掃了一下報(bào)錯(cuò)信息,沒看懂錯(cuò)在哪里。這跟我們平時(shí)碰上程序bug,但日志不清晰,看問題在哪是一樣的。


          看了一下sql,主要有三部分,select,from語句(user_tab_cols是一個(gè)視圖),還有where條件,錯(cuò)誤可能是select部分,或者user_tab_cols視圖語句或者是where條件語句造成的,但不知道是哪一部分出錯(cuò)。


          于是我先嘗試把where條件去掉,看還會(huì)不會(huì)報(bào)錯(cuò)。



          結(jié)果還是一樣的錯(cuò),那說明錯(cuò)誤位置應(yīng)該不在where條件里面,那繼續(xù)嘗試縮小范圍。

          這次我一步到位,把sql簡(jiǎn)化成只有一個(gè)元素:表名



          發(fā)現(xiàn)可以查詢成功,那應(yīng)該在select語句里面。看查詢有多個(gè)字段,暫時(shí)不知道是哪個(gè)字段有問題,嘗試刪除后面一半。



          這時(shí)發(fā)現(xiàn)問題還在,那應(yīng)該是前面兩個(gè)字段有問題。繼續(xù)刪除一個(gè)字段再試。



          這時(shí)還是報(bào)錯(cuò),但錯(cuò)誤范圍已經(jīng)很小了。熟悉oracle的人一看就應(yīng)該能知道column是關(guān)鍵字,這里應(yīng)該是字段名寫錯(cuò)了。(后來發(fā)現(xiàn)正確字段名應(yīng)該是column_name)
          如果這時(shí)還想不起來錯(cuò)誤原因怎么辦?——繼續(xù)刪減。看我下面的操作,刪除別名t



          刪除到這里,發(fā)現(xiàn)還是報(bào)錯(cuò),但錯(cuò)誤提示不一樣了。這時(shí)再上網(wǎng)查一下,關(guān)于oracle的column信息,會(huì)在百度發(fā)現(xiàn)很多相關(guān)內(nèi)容。這時(shí)有一定編程經(jīng)驗(yàn)的人應(yīng)該肯定能回憶起來。



          發(fā)現(xiàn)問題后,修改好,現(xiàn)在可以正常查出默認(rèn)值了。



          這里展示了一種程序員查bug的思路,就是不斷減少可能導(dǎo)致報(bào)錯(cuò)的內(nèi)容,直到錯(cuò)誤不復(fù)現(xiàn)(或者錯(cuò)誤發(fā)生變化),問題足夠簡(jiǎn)單,可以一眼了然知道原因。


          通過減少變量,逐步增加確定性,這是一種程序員查bug的思路。還有一種思路是倒過來,從一個(gè)最簡(jiǎn)的系統(tǒng),逐步增加變量,最近確定問題,以后有機(jī)會(huì)再分享案例。



          出處:cnblogs.com/kingstarer/p/14897896.html










          關(guān)注GitHub今日熱榜,專注挖掘好用的開發(fā)工具,致力于分享優(yōu)質(zhì)高效的工具、資源、插件等,助力開發(fā)者成長(zhǎng)!







          點(diǎn)個(gè)在看,你最好看



          瀏覽 63
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲综合日韩在线 | 免费看AV的网址 | 丁香五月婷婷久久 | 欧美V日韩V | 麻豆91网|