SHOW PROCEDURE CODE proc_name
このステートメントは、デバッギングサポートとともに構築されたサーバーでのみ使用可能な
MySQL
の拡張機能です。このステートメントは、指定されたストアドプロシージャーの内部実装の表現を表示します。同様のステートメントである
SHOW FUNCTION
CODE
は、ストアドファンクションに関する情報を表示します
(項8.5.5.20. 「SHOW FUNCTION CODE
構文」 を参照)。
どちらのステートメントでも、このルーチンの所有者であるか、または
mysql.proc
テーブルに対する
SELECT
アクセス権を持っていることが必要です。
もし名づけられたルーチンが有効なら、各ステートメントは結果セットを作成します。結果セット内の各行は、ルーチン内の
1 つの 「instruction」
に対応します。最初のカラムは、0
で始まる序数 Pos
です。2 つめのカラムは、SQL
ステートメントや
(通常元のソースから変更されたもの)
ストアドルーチンヘッダーに対してだけ意味を持つコマンドを含む
Instruction
です。
mysql>DELIMITER //
mysql>CREATE PROCEDURE p1 ()
->BEGIN
->DECLARE fanta INT DEFAULT 55;
->DROP TABLE t2;
->LOOP
->INSERT INTO t3 VALUES (fanta);
->END LOOP;
->END//
Query OK, 0 rows affected (0.00 sec) mysql>SHOW PROCEDURE CODE p1//
+-----+----------------------------------------+ | Pos | Instruction | +-----+----------------------------------------+ | 0 | set fanta@0 55 | | 1 | stmt 9 "DROP TABLE t2" | | 2 | stmt 5 "INSERT INTO t3 VALUES (fanta)" | | 3 | jump 2 | +-----+----------------------------------------+ 4 rows in set (0.00 sec)
この例では、非実行可能な
BEGIN
および
END
ステートメントが消えており、DECLARE
ステートメントでは、実行可能ファイルの部分
(デフォルトが割り当てられている部分)
のみが表示されています。(デフォルトが割り当てられている部分)
ソースから取り出された各ステートメントに対しては、後に型が続くコード文字
variable_name
stmt
があります。(9
は DROP
、5 は
INSERT
を意味する、という感じのものです)。最終行は、GOTO
instruction #2
という意味を持つ
jump 2
指示を含んでいます。
これらのステートメントは、MySQL 5.1.3 で追加されました。