MySQL 8.4 發行說明
SHOW PROCEDURE CODE proc_name
此陳述式是 MySQL 的擴充功能,僅適用於已使用偵錯支援建置的伺服器。它會顯示指定預存程序內部實作的表示形式。類似的陳述式 SHOW FUNCTION CODE
會顯示有關預存函數的資訊 (請參閱 章節 15.7.7.20,「SHOW FUNCTION 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> 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
,依此類推)。最後一列包含一個指令 jump 2
,表示 GOTO 指令 #2
。