如何得到plsql中執行時報錯的SQL的位置行號

2021-06-21 10:13:17 字數 1744 閱讀 7874

在進行pl/sql開發的時候經常會寫以下**,

declare

n1 varchar(10);

n2 varchar(10);

n3 varchar(10);

begin

select name into n1 from test_tab1 where id = 2;

select name into n2 from test_tab2 where id = 2;

select name into n3 from test_tab3 where id = 2;

exception

when others then

rollback;

insert error_info_table values(『proc name』,substr(sqlerrm,1,200));

commit;

end;

/當select into 或其他型別語句出現錯誤的時候,利用exception 截獲住,把錯誤記錄到 error table裡,以便查詢錯誤資訊,但是這樣做在查詢問題的時候仍然有些麻煩,我們必須乙個乙個select語句去執行,看看錯誤到底發生在那條語句,有些時候我們可能會用以下方法來解決這個問題

1. 每條語句都加一組 begin … exception … end .

2. 在每條語句後都加乙個標記變數,最後把改標記變數也存入error table.

很明顯,這2中方法都會增加**編寫的工作量和複雜度。

那麼是否有方法能得到,發生錯誤的**行號呢?

在10gr1及之前,只能不去截獲exception, 讓錯誤發生,從錯誤資訊中得到錯誤發生的位置,當然這肯定是不能接受的。

從10gr2後,我們可以利用 package dbms_utility.format_error_backtrace 來的到發生錯誤語句的行號。

請看以下例子:

sql> declare

2    n1 varchar(10);

3    n2 varchar(10);

4    n3 varchar(10);

5  begin

6    select name into n1 from test_tab1 where id = 2;

7    select name into n2 from test_tab2 where id = 2;

8    select name into n3 from test_tab3 where id = 2;

9  exception

10      when others then

11        dbms_output.put_line(substr(sqlerrm,1,200));

12       dbms_output.put_line(dbms_utility.format_error_backtrace);

13  end;

14  /

ora-01422: exact fetch returns more than requested number of rows

ora-06512: at line 7

pl/sql procedure successfully completed.

根據這個「ora-06512: at line 7」,我們可以很容易的找到發生錯誤的語句的位置。

編譯通過,可是執行時報錯!!!

編譯通過,可是執行時報錯!vcl元件開發及應用 大家幫忙看看,這個錯誤提示是什麼意思?error reading printdbgrideh1.pagefooter.titlefont.charset property titlefont does not exist.這個可能是讀取了以前儲存的檔案...

appium 鏈結真機執行時報錯

解決辦法 還在找原因,後續更新進來。2.修改原始碼檔案如下 b.在adb.js的1035行找到 this.shell ps name function err,stdout 並增加上面用到的shell grep函式 adb.prototype.shell grep function cmd,grep...

python執行時 報vc 未安裝錯誤

錯誤原因 報這個錯誤的原因是python的distutils模組中的msvc9compiler.py並不從環境變數指定的路徑中尋找vcvarsall.bat,而是通過登錄檔來尋找 然而,不知為什麼編譯器安裝過程沒有配置登錄檔。ctrl r開啟註冊編輯器執行regedit 配置 1 如果你安裝的pyt...