debugger_tutorial ストアドプロシージャでバグを診断するには、ブレークポイントを設定してコードをステップスルーし、プロシージャの実行にともなって変数の値を監視します。
前提条件
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:デバッガの使用開始
このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。レッスン 1:デバッガの起動とバグの検査を参照してください。
右ウィンドウ枠で、[debugger_tutorial (GROUPO)] の [SQL] タブに次の文があることを確認します。
OPEN cursor_this_customer; |
ブレークポイントを追加するには、文の左側にあるグレーの縦線の領域をクリックします。ブレークポイントは、赤い円で表示されます。
左ウィンドウ枠で、[debugger_tutorial (GROUPO)] を右クリックし、[Interactive SQL から実行] をクリックします。
Sybase Central の右枠で、ブレークポイントの上部に黄色の矢印が表示されます。
[デバッガの詳細] ウィンドウで [ローカル] タブをクリックし、プロシージャ内のローカル変数とその現在の値およびデータ型のリストを表示します。Top_Company、Top_Value、This_Value、This_Company の各変数は、すべて初期化されていないため、NULL を示しています。
[F11] キーを押して、プロシージャをスクロールします。次の行に到達すると、変数の値が変化します。
IF SQLSTATE = error_not_found THEN |
[F11] キーをもう 2 回押して、分岐を確認します。黄色の矢印が、次のテキストに戻ります。
customer_loop: loop |
IF
テストは TRUE を返しませんでした。テストが失敗したのは、NULL とどのような値を比較しても NULL が返されるためです。NULL 値によりテストは失敗し、IF
...END IF
文内のコードは実行されませんでした。
このことから、Top_Value が初期化されていないことが原因とわかります。
プロシージャコードを変更しないで、Top_Value が初期化されていないことが問題であるとする仮説をテストします。
[デバッガの詳細] ウィンドウで、[ローカル] タブをクリックします。
[Top_Value] 変数をクリックし、[値] フィールドに 3000 と入力し、[Enter] を押します。
[This_Value] 変数の [値] フィールドが 3000 よりも大きな値になるまで [F11] キーを繰り返し押します。
ブレークポイントをクリックして、グレーにします。
[F5] キーを押して、プロシージャを実行します。
[Interactive SQL] ウィンドウが再び表示されて、正しい結果が表示されます。
top_company | top_value |
---|---|
Chadwicks | 8076 |
[Interactive SQL] ウィンドウが開いている場合は閉じます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |