MYSQL- 查看存储过程调式信息语句(二十七)
13.7.5.27 SHOW PROCEDURE CODE 语句
SHOW PROCEDURE CODE proc_name
此语句是MySQL扩展,仅适用于已构建有调试支持的服务器。它显示了命名存储过程的内部实现的表示。类似的语句SHOW FUNCTION CODE
显示有关存储函数的信息(见第13.7.5.19节“SHOW FUNTION CODE语句”)。
要使用任一语句,您必须切换结束符 DEFINER 使用这个进行声明,具有 SHOW_ROUTINE
权限,或具有全局级别的SELECT
权限。
如果指定的例程可用,则每条语句都会生成一个结果集。结果集中的每一行对应例程中的一条“指令”。第一列是Pos,它是一个以0开头的序号。第二列是Instruction,它包含一个SQL语句(通常从原始源代码更改),或者一个仅对存储的例程处理程序有意义的指令。
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.01 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)
mysql> CREATE FUNCTION test.hello (s CHAR(20))
RETURNS CHAR(50) DETERMINISTIC
RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)
-- 此模式需要 mysql编译的时候使用 debug模式 不然会报错
-- 1289 - The 'SHOW PROCEDURE|FUNCTION CODE' feature is disabled; you need MySQL built with '--with-debug' to have it working
mysql> SHOW FUNCTION CODE test.hello;
+-----+---------------------------------------+
| Pos | Instruction |
+-----+---------------------------------------+
| 0 | freturn 254 concat('Hello, ',s@0,'!') |
+-----+---------------------------------------+
1 row in set (0.00 sec)
在这个例子中,不可执行的BEGIN和END语句已经消失,对于DECLARE variable_name语句,只显示可执行部分(分配默认值的部分)。对于从源代码中获取的每条语句,都有一个码字stmt,后跟一个类型(9表示DROP,5表示INSERT,依此类推)。最后一行包含指令跳转2,即GOTO指令#2。