Mysql教程

14.3查看存储过程和函数

存储过程和函数创建以后,用户可以査看存储过程和函数的状态和定义。用户可以通过SHOW STATUS语句来查看存储过程和函数的状态,也可以通过SHOW CREATE语句来查看存储过程和函数的定义。用户也可以通过查询information_schema数据库下的Routines表来查看存储过程和函数的信息。本小节将详细讲解查看存一储过程和函数的状态与定义的方法。

14.3.1 SHOW STATUS语句查看存储过程和函数的状态

MySQL中可以通过SHOW STATUS语句查看存储过程和函数的状态。其基本语法形式如下:

SHOW { PROCEDURE | FUNCTION } STATUS [ LIKE ' pattern '];

其中,PROCEDURE参数表示查询存储过程;FUNCTION参数表示查询存储函数;LIKE' pattem '参数用来匹配存储过程或函数的名称。

【示例14-21】下面查询名为num_from_employee的存储过程的状态。代码执行如下:

mysql> SHOW PROCEDURE STATUS LIKE 'num_from_employee'\G
*********************************1.row************************
                           Db: example
                     Name: num_from_employee
                       Type: PROCEDURE
                     Definer: root@localhost
                 Modified: 2009-10-29 21:44:39
                  Created: 2009-10-29 21:44:39
                    Security_type: DEFINER
                             Comment:
                   character_set_client: latin1
             collation_connection: latin1_swedish_ci
               Database Collation: utf8_general_ci
                    1 row in set (0.00 sec)

査询结果显示了存储过程的创建时间、修改时间和字符集等信息。

14.3.2 SHOW CREATE语句查看存储过程和函数的定义

MySQL中可以通过SHOW CREATE语句查看存储过程和函数的状态。其基本语法形式如下:

SHOW CREATE { PROCEDURE | FUNCTION } sp_name ;

其中,PROCEDURE参数表示查询存储过程;FUNCTION参数表示查询存储函数;sp_name参数表示存储过程或函数的名称。

【示例14-22】下面查询名为num_from_employee的存储过程的状态。代码执行如下:

mysql> SHOW CREATE PROCEDURE num_from_employee \G
*****************************1.row*********************
Procedure: num_from_employee
sql_mode:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER='root'@localhost' PROCEDURE 'num_from_employee'
(IN emp_id INT,
OUT count_num INT)
READS SQL DATA
BEGIN
SELECT COUNT(*) INTO count_num FROM employee WHERE d_id=emp_id ;
END
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: utf8_general_ci
1 row in set (0.00 sec)

査询结果显示了存储过程的定义、字符集等信息。

注意:SHOW STATUS语句只能查看存储过程或函数是操作哪一个数据库、存储过程或函数的名称、类型、谁定义的、创建和修改时间、字符编码等信息。但是,这个语句不能查询存储过程或函数的具体定义。如果需要查看详细定义,需要使用 SHOW  CREATE语句。

14.3.3 从information_schema.Routines 表中查看存储过程和函数的信息

存储过程和函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息。其基本语法形式如下:

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='sp_name';

其中,ROUTINE_NAME字段中存储的是存储过程和函数的名称;sp_name参数表示存储过程或函数的名称。

【示例14-23】下面从Routines表中查询名为num_from_employee的存储过程的信息。代码执行如下:

mysql> SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='num_ from_employee' \G
**********************************1.row******************************************
SPECIFIC_NAME: num_from_employee ROUTINE_CATALOG: def
ROUTINE_SCHEMA: example
ROUTINE_NAME: num_from_employee
ROUTINE_TYPE: PROCEDURE
DATA_TYPE:
CHARACTER_MAXIMUM_LENGTH: NULL
CHARACTER_OCTET_LENGTH: NULL
NUMERiC_PRECiSION: NULL
NUMERIC_SCALE: NULL
CHARACTER_SET_NAME: NULL
COLLATION_NAME: NULL
DTD_IDENTiFIER: NULL
ROUTINE_BODY: SQL
ROUTINE_DEFINITION: BEGIN
SELECT COUNT(*) INTO count_num
FROM employee
WHERE d_id=emp_id ;
END
EXTERNAL_NAME: NULL
EXTERNAL_LANGUAGE: NULL
PARAMEfER_STVLE: SQL
IS_DETERMINISTIC: NO
SQL_DATA_ACCESS: READS SQL DATA
SQL_PATH: NULL SECURITY__TYPE: DEFINER
CREATED: 2009-10-29 21:44:39
LAST_ALTERED: 2009-10-29 21:44:39
SQL_MODE:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION_ROUTINE_COMMENT:
DEFINER: root@localhost
CHARACTER_SET_CLIENT: latin1
COLLATION_CONNECTION: latin1_swedish_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)

查询结果显示num_from_employee的详细信息。

注意:在information_schema数据库下的Routines表中,存储着所有存储过程和函数的定义。如果使用SELECT语句查询Rountines表中的存储过程和函数的定义时,一定要使用ROUTEME_NAME字段指定存储过程或函数的名称。否则,将查询出 所有的存储过程或函数的定义。

关注微信获取最新动态