那麼有可能獲得當前的代碼行嗎?Oracle pl/sql代碼行(行)到變量
1,2,3,4 v_variable :=(get_line or something???) and in variable are value 4?
5,6,7,8,9 v_variable :=(get_line or something???) and in variable are value 9?
我只是想找到捉蟲子 感謝最簡單的方法。
1,2,3,4, code lines...
那麼有可能獲得當前的代碼行嗎?Oracle pl/sql代碼行(行)到變量
1,2,3,4 v_variable :=(get_line or something???) and in variable are value 4?
5,6,7,8,9 v_variable :=(get_line or something???) and in variable are value 9?
我只是想找到捉蟲子 感謝最簡單的方法。
1,2,3,4, code lines...
所以是有可能得到當前代碼行?
是的,這是可能的。從Oracle 10g中$$PLSQL_LINE
查詢指令開始可用於代碼返回行數,其中出現$$PLSQL_LINE
:
SQL> declare
2 l_cur_cl pls_integer;
3 begin
4 l_cur_cl := $$PLSQL_LINE;
5 dbms_output.put_line('Line #: '|| to_char(l_cur_cl) || chr(13)
6 || 'Current line #: '|| to_char($$PLSQL_LINE));
7 end;
8/
輸出:
Line #: 4
Current line #: 6
PL/SQL procedure successfully completed
這不需要他在每一行後面打印/存儲行號以便幫助他跟蹤錯誤? – Adarsh
不是所有行,但是在很多地方都是...... thx – user2879235
@Adarsh爲了能夠稍後使用該行號,是的,它需要將指令的結果存儲在變量中。但是這種方法對異常跟蹤來說不是一個好的選擇(如果這是OP的最終目標)。您必須在可能在同一行或前一行中引發異常的語句之前放置「$$ PLSQL_LINE」。 –
神諭異常處理系統可以幫助你做什麼你需要。您可以不用手動獲取行號,而是引發和處理用戶定義的異常或系統異常,並在異常塊中使用以下代碼來獲取發生錯誤的lin編號。
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
閱讀這篇文章,以獲取更多信息和示例。
http://www.oracle.com/technetwork/issue-archive/2005/05-mar/o25plsql-093886.html
是的,當涉及到追蹤異常時,毫無疑問,這是一個可行的方法。不過,這個小小的改正。如果我們需要在PL/SQL塊的異常部分中得到一個產生異常的行號,調用'DBMS_UTILITY.FORMAT_ERROR_BACKTRACE'將是一個更好的選擇。 –
@NicholasKrasnov謝謝你指出。我提供了DBMS_UTILITY.FORMAT_ERROR_BACKTRACE的鏈接,並在DBMS_UTILITY.FORMAT_ERROR_STACK中鍵入。 – Adarsh
我只是想找到捉蟲子
找bug的最簡單的方法被稱爲unit testing最簡單的方法。在test driven development嚴格申請,過了一段時間,你將不會有很多錯誤!
互聯網並不缺乏指令,也沒有Stack Overflow的問題。開始搭配:
'找到趕上bugs'您需要更詳細地說明一點點自己的情況最簡單的方法。你想要捕捉什麼樣的錯誤以及在什麼情況下。如果你不隱藏引發異常的行號,通過在調用'raise'或'raise_application_error()'函數的異常部分重新提升它,oracle會爲你提供確切的行號。 –
當其他人raise_application_error(-20001,l_cur_cl || SQLERRM)那就是這樣,因爲不是所有時候oracle提供的行號...... – user2879235