SHOW {PROCEDURE | FUNCTION} CODE sp_name
これらのステートメントは、デバッグ
サポートを利用して構築されたサーバに対してだけ有効な
MySQL
拡張子です。それらは名づけられたルーチンの内部インプリメンテーション表現を表示します。そのステートメントは、あなたがそのルーチンの持ち主になるか、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 で追加されました。