Documentation Home

13.7.5.28 SHOW PROCEDURE CODE语句

SHOW PROCEDURE CODE proc_name

此语句是一个 MySQL 扩展,仅适用于构建了调试支持的服务器。它显示指定存储过程的内部实现的表示。类似的语句,SHOW FUNCTION CODE显示有关存储函数的信息(请参阅第 13.7.5.20 节,“SHOW FUNCTION CODE 语句”)。

要使用任一语句,您必须是例程的所有者或有权SELECT访问该 mysql.proc表。

如果命名例程可用,则每个语句都会生成一个结果集。结果集中的每一行对应 于例程中的一个指令” 。第一列是 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> SHOW FUNCTION CODE test.hello;
+-----+---------------------------------------+
| Pos | Instruction                           |
+-----+---------------------------------------+
|   0 | freturn 254 concat('Hello, ',s@0,'!') |
+-----+---------------------------------------+
1 row in set (0.00 sec)

在这个例子中,不可执行的BEGINEND语句已经消失了,对于 语句,只出现了可执行的部分(赋值default的部分)。对于从源代码中获取的每个语句,都有一个代码字,后跟一个类型(9 表示,5 表示 ,依此类推)。最后一行包含一条指令,意思是 。 DECLARE variable_namestmtDROPINSERTjump 2GOTO instruction #2