問題と目的:
Oracle開発者は、コードがWebまたは中間層から呼び出されるとき(つまり、開発者セッションが問題が発生するセッションと一致しないとき)に、PL / SQLコードのデバッグの問題に直面することがあります。
データベースとWeb間の2層および3層の相互作用スキームでWeb側で問題が発生した場合は特に重要です(以下は3層相互作用アーキテクチャの例です)。
図1-データベースとWebの相互作用のための3層アーキテクチャ。問題解決方法:
次のパッケージは、PL / SQLコードのデバッグに関する問題の解決に役立ちます。
- DBMS_PIPE-Oracleデータベースの2つのセッション間でメッセージ(パイプ)を送信できるようにするパッケージ。
- DBMS_ALERT-さまざまなOracleデータベースイベントの非同期アラートのサポートを提供するパッケージ。
以下は、DBMS_PIPEとDBMS_ALERTを同時に使用してデバッグするメソッドのコードです。
create or replace procedure checkout_with_pipe_and_alert(p_cycle_size in number) is c_method_error constant number := -20000; c_method_error_message constant varchar2(4000) := 'Cycle size should be > 0'; l_power_value number; l_i_value number := 1; l_pipe pls_integer; begin if p_cycle_size > 0 then for i in 1 .. p_cycle_size loop l_power_value := power(i, 2); l_i_value := l_i_value * i;
DBMS_PIPEおよびDBMS_ALERTに許可がない場合、それらを配布します。
図2-Oracle SYSスキーマサーバーから作業スキームへの許可の分配PL / SQL Developerを使用してDBMS_PIPEおよびDBMS_ALERTのメッセージをキャッチします。
コードを使用してメッセージをキャッチすることは考えません。 Oracle DOCおよびインターネット上の十分な情報。
[
ツール]→[イベントモニター...]に移動し、一方のウィンドウでイベントの種類「
パイプ 」を選択し、もう一方のイベント名の「
アラート 」で、コードで設定したパイプとアラートの名前を示し、
開始をクリックします:
図3-パイプを使用したウィンドウの設定
図4-アラートを含むウィンドウの構成Web /中間層(この場合は別のセッション)からcheckout_with_pipe_and_alertメソッドを実行した後:
begin checkout_with_pipe_and_alert(5); end;
[パイプ]ウィンドウと[アラート]ウィンドウでは、次の結果が得られます。
図5-パイプから情報を受信した結果
図6-Alertから情報を受信した結果結論:- dbms_pipeは、さまざまなセッションでpl / sqlをデバッグするための優れたメソッドです。パイプのみが定期的に詰まっているため、dbms_pipe.purgeメソッドを使用する必要があります。
- dbms_alertの使用はお勧めしません。 デバッグ中にメッセージが定期的に失われます(図6からわかるように)、正しく使用していない可能性があります。 誰かがこれに出くわした場合は、コメントを書いて、記事を修正します。