文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  SHOW PROCEDURE CODE 陳述式

15.7.7.28 SHOW PROCEDURE CODE 陳述式

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)

在此範例中,不可執行的 BEGINEND 陳述式已消失,而對於 DECLARE variable_name 陳述式,只會出現可執行的部分(指定預設值的部分)。對於每個取自來源的陳述式,都會有一個代碼字 stmt,後接一個類型 (9 表示 DROP,5 表示 INSERT,依此類推)。最後一列包含一個指令 jump 2,表示 GOTO 指令 #2