外部データベースセッションのPL / SQLコードのデバッグ

問題と目的:



Oracle開発者は、コードがWebまたは中間層から呼び出されるとき(つまり、開発者セッションが問題が発生するセッションと一致しないとき)に、PL / SQLコードのデバッグの問題に直面することがあります。



データベースとWeb間の2層および3層の相互作用スキームでWeb側で問題が発生した場合は特に重要です(以下は3層相互作用アーキテクチャの例です)。



図1-データベースとWebの相互作用のための3層アーキテクチャ。



問題解決方法:



次のパッケージは、PL / SQLコードのデバッグに関する問題の解決に役立ちます。





以下は、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; --Send pipe info l_pipe := dbms_pipe.create_pipe(pipename => 'pipe'); dbms_pipe.pack_message(i || '.l_power_value:=' || l_power_value || ' l_i_value=' || l_i_value); l_pipe := dbms_pipe.send_message(pipename => 'pipe'); --Send alert info dbms_alert.signal(name => 'alert', message => i || '.l_power_value:=' || l_power_value || ' l_i_value=' || l_i_value); end loop; else raise_application_error(c_method_error, c_method_error_message); end if; end checkout_with_pipe_and_alert;
      
      







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から情報を受信した結果



結論:




All Articles