赞
踩
用 SHOW STATUS 语句可以查看存储过程和函数的状态,其基本的语法结构如下:
SHOW { PROCEDURE | FUNCTION } STATUS [ LIKE 'pattern' ]
SHOW STATUS 语句是 MySQL 的一个扩展。它返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。如果没有指定样式,根据使用的语句,所有的存储程序或存储函数的信息都会被列出。PROCEDURE 和 FUNCTION 分别表示查看存储过程和函数;LIKE 语句表示匹配存储过程或函数的名称。
【例】:
- mysql> SHOW PROCEDURE STATUS LIKE 'C%'\G;
- *************************** 1. row ***************************
- Db: test
- Name: CountProc
- Type: PROCEDURE
- Definer: root@localhost
- Modified: 2016-02-27 11:06:11
- Created: 2016-02-27 11:06:11
- Security_type: DEFINER
- Comment:
- character_set_client: utf8
- collation_connection: utf8_general_ci
- Database Collation: latin1_swedish_ci
- 1 row in set (0.01 sec)
除了SHOW STATUS 之外,还可以使用 SHOW CREATE 语句查看存储过程和函数的状态。
SHOW CREATE { PROCEDURE | FUNCTION } sp_name
SHOW CREATE 语句是 MySQL 的一个扩展,类似于 SHOW CREATE TABLE, 它返回一个可用来重新创建已命名子程序的确切字符串。PROCEDURE 和 FUNCTION 分别表示查看存储过程和函数; LIKE 语句表示匹配存储过程或函数的名称。【例】SHOW CREATE 语句示例。代码如下:
- mysql> SHOW CREATE FUNCTION test_db.CountProc2 \G
- *************************** 1. row ***************************
- Function: CountProc2
- sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `CountProc2`( sid INT ) RETURNS int(11)
- BEGIN
- RETURN ( SELECT COUNT(*) FROM fruits WHERE s_id = sid );
- END
- character_set_client: utf8
- collation_connection: utf8_general_ci
- Database Collation: utf8_general_ci
- 1 row in set (0.03 sec)
在 MySQL 中,存储过程和函数的信息存储在 information_schema 数据库下的 Routines 表中,可以通过查询该表的记录来查询存储过程和函数的信息,其基本的语法形式如下:
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME = ' sp_name ' ;
其中,ROUTINE_NAME 字段中存储的是存储过程和函数的名称; sp_name 参数表示存储过程或函数的名称。
【例】 从 Routines 表中查询名为 CountProc2 的存储函数的信息。代码如下:
- mysql> SELECT * FROM information_schema.Routines
- -> WHERE ROUTINE_NAME = 'CountProc2' AND ROUTINE_TYPE = 'FUNCTION' \G
- *************************** 1. row ***************************
- SPECIFIC_NAME: CountProc2
- ROUTINE_CATALOG: def
- ROUTINE_SCHEMA: test_db
- ROUTINE_NAME: CountProc2
- ROUTINE_TYPE: FUNCTION
- DATA_TYPE: int
- CHARACTER_MAXIMUM_LENGTH: NULL
- CHARACTER_OCTET_LENGTH: NULL
- NUMERIC_PRECISION: 10
- NUMERIC_SCALE: 0
- DATETIME_PRECISION: NULL
- CHARACTER_SET_NAME: NULL
- COLLATION_NAME: NULL
- DTD_IDENTIFIER: int(11)
- ROUTINE_BODY: SQL
- ROUTINE_DEFINITION: BEGIN
- RETURN ( SELECT COUNT(*) FROM fruits WHERE s_id = sid );
- END
- EXTERNAL_NAME: NULL
- EXTERNAL_LANGUAGE: NULL
- PARAMETER_STYLE: SQL
- IS_DETERMINISTIC: NO
- SQL_DATA_ACCESS: CONTAINS SQL
- SQL_PATH: NULL
- SECURITY_TYPE: DEFINER
- CREATED: 2018-05-22 19:54:57
- LAST_ALTERED: 2018-05-22 19:54:57
- SQL_MODE: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- ROUTINE_COMMENT:
- DEFINER: root@localhost
- CHARACTER_SET_CLIENT: utf8
- COLLATION_CONNECTION: utf8_general_ci
- DATABASE_COLLATION: utf8_general_ci
- 1 row in set (0.00 sec)
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
information_schema 数据库中的 Routines 表中,存储了所有存储过程和函数的定义。使用 SELECT 语句查询 Routines 表中的存储过程和函数的定义时,一定要使用 ROUTNE_NAME 字段指定存储过程或函数的名称。否则,将查询出所有的存储过程或函数的定义。如果存储过程和存储函数名称相同,则需要要同时指定 ROUTINE_TYPE 字段表明查询的是哪种类型的存储程序。
【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。