我在動態 oracle sql 陳述句中有一個 for 回圈:
begin
for i in (select x from index_list) loop
-- do stuff with i.x
dmbs_output.put_line('I completed item '||i.x||' of the loop');
end loop;
end;
/
但是 dmbs_output.put_line 中的訊息只會在所有回圈完成后才會顯示,全部一起。有沒有辦法在每一輪回圈執行時顯示它們?
uj5u.com熱心網友回復:
dbms_output 根本不寫入輸出設備(螢屏)。作為服務器端行程,它無法訪問客戶端的顯示設備。相反,它寫入內部緩沖區。該緩沖區僅在客戶端呼叫的行程完成時回傳給客戶端(可供客戶端使用),此時處理控制權被傳遞回呼叫客戶端。所以,不,您不會看到結果,而程序控制仍然屬于 pl/sql 程序——整個程序,而不僅僅是回圈。
即便如此,如何處理該緩沖區仍取決于客戶。在 sqlplus 中,我們使用“set serveroutput on”命令指示它顯示緩沖區內容。其他客戶端可能有其他方法來指導它處理訊息緩沖區。還有一些客戶根本沒有辦法,只是忽略它。
uj5u.com熱心網友回復:
檢查您的開發工具(PL/SQL Developer、SQL Developer、Toad 等)以了解如何使用 PL/SQL 除錯器。
其他選項是
- 用于
dbms_application_info設定會話的當前模塊、操作和客戶端資訊的值。然后通過查詢 v$session 可以從其他會話中看到這些。 - 將訊息記錄到表或檔案中。
- 如果寫入表,您將需要提交每個條目,如果在每個回圈迭代中存在您不想提交的其他事務,則使用自治事務。
- 如果寫入檔案,您可能會考慮在檔案上定義一個外部表以使內容可查詢。
- 將其撰寫為流水線函式并進行查詢,以便輸出一次顯示一行作為查詢結果。
- 理論上,您可以使用 HTTP 介面并在網頁上跟蹤結果。我還沒有嘗試過,所以不確定它有多實用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414328.html
標籤:
