SHOW PROCEDURE CODE语句
SHOW PROCEDURE CODE proc_name
该语句是MySQL扩展,仅适用于使用调试支持构建的服务器。它显示了命名存储过程的内部实现。类似的语句SHOW FUNCTION CODE
显示有关存储函数的信息(请参见“ SHOW FUNCTION CODE语句”)。
要使用这两个语句,您必须是名为例程的用户DEFINER
,具有SHOW_ROUTINE
特权或SELECT
在全局级别具有特权。
如果命名例程可用,则每个语句都会生成一个结果集。结果集中的每一行对应于例程中的一条“指令”。第一列是Pos
,它是一个以0开头的序数。第二列是Instruction
,它包含一个SQL语句(通常从原始源更改),或仅对存储例程处理程序有意义的指令。
mysql>DELIMITER // mysql>CREATE PROCEDURE p1 ()BEGIN DECLARE fanta INTDEFAULT 55;DROP TABLE t2;LOOP INSERT INTO t3VALUES (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>SHOW FUNCTION CODE test.hello; +----- +--------------------------------------- + | Pos | Instruction | +----- +--------------------------------------- + | 0 | freturn 254 concat('Hello, ',s@0,'!') | +----- +--------------------------------------- + 1 row in set (0.00 sec)
在此示例中,不可执行BEGIN
和END
语句已消失,并且对于该语句,仅显示可执行部分(分配了默认值的部分)。对于从源头获取的每个语句,都有一个代码字,其后是一个类型(9表示,5表示等等)。最后一行包含指令,即含义。DECLARE variable_name
stmt
DROP
INSERT
jump 2
GOTO instruction #2