MySQL——查看存储过程和函数

    1.   查看存储过程和函数的状态

     用  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)


2.   查看存储过程和函数的定义

    除了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)


3.   查看存储过程和函数的信息

    在  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)


    information_schema  数据库中的  Routines  表中,存储了所有存储过程和函数的定义。使用 SELECT 语句查询  Routines 表中的存储过程和函数的定义时,一定要使用 ROUTNE_NAME  字段指定存储过程或函数的名称。否则,将查询出所有的存储过程或函数的定义。如果存储过程和存储函数名称相同,则需要要同时指定  ROUTINE_TYPE  字段表明查询的是哪种类型的存储程序。


【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版

存储函数和自定义函数是两种不同的概念。引用\[1\]中提到,存储函数是在数据库中创建的一种函数,它必须有一个return子句用于返回函数值,并且可以通过CREATE FUNCTION语句来创建。而自定义函数是指用户自己定义的函数,可以在程序中使用,但不是在数据库中创建的。引用\[2\]中提到,在MySQL中,存储过程函数可以使用CREATE PROCEDURE和CREATE FUNCTION语句来创建,而自定义函数则可以直接在程序中定义。存储过程函数可以通过CALL语句来调用,而自定义函数可以通过函数名来引用。此外,存储过程函数可以有输出参数,可以返回多个值,而自定义函数通常只能返回一个标量值。根据引用\[3\]中的原则,如果只有一个返回值,通常使用存储函数;如果有多个返回值,通常使用存储过程。 #### 引用[.reference_title] - *1* *3* [Oracle数据库——存储过程和自定义函数](https://blog.csdn.net/hyh17808770899/article/details/106867758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [八、存储过程与自定义函数](https://blog.csdn.net/qq_52059326/article/details/124399461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值