视图、存储过程和函数(二)

1、什么是存储过程和函数:

  存储过程和函数是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。

  存储过程和函数的区别在于函数必须有返回值,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型,而函数的参数只能是IN类型的。如果有函数从其他类型的数据库迁移到MySQL,那么就可能因此需要将函数改造成存储过程。

2、存过过程和函数的相关操作:

  2.1、创建、修改存储过程或者函数

   CREATE PROCEDURE sp_name([pro_parameter[,...]])

    [characteristic...] routine_body

  CREATE FUNCTION sp_name([func_parameter[,...]])

    RETURNS type

    [characteristic ...] routine_body

  

    proc_parameter:

    [IN | OUT | INOUT] param_name type

 

    func_paramenter:

    param_name type

 

  type:

    Any valid MySQL data type

 

  characteristic:

    LANGUAGE SQL | [NOT] DETERMINISTIC 

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SERCURITY { DEFINER | INVEOKER }

    | COMMENT 'string'

  routine_body:

    Valid SQL procedure statement or statements

 

  ALTER  {PROCEDURE | FUNCTION} sp_name[characteristic...]

 

  characteristic:

    {CONTAINS SQL | NO SQL | READS SQL DATA | MODEFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string' 

  调用过程的语法如下:

  CALL sp_name([parameter[,...]])

  MySQL的存储过程和函数中允许包含DDL语句,也允许在存储过程中执行提交(Commit,即确认之前的修改)或者回滚(Rollback,即放弃之前的修改),但是存储过程和函数中不允许执行LOAD DATA INFIL语句。此外,存储过程和函数中可以调用其的过程或者函数。  

    CREATE DEFINER=`daiyihua`@`%` PROCEDURE `get_sun_count`(IN parentId INT,OUT sunCount INT )
    BEGIN
            #Routine body goes here...
            SELECT COUNT(1) FROM area where parent_id = parentId;
            SELECT FOUND_ROWS() INTO sunCount;
            END

   上面建立的存储过程,表示输入一个parentId,统计符合该条件的记录数并返回;

 

      可以看到调用存储过程于直接执行SQL的效果是相同的,但是存储过程的好处在于处理逻辑都封装在数据库端,调用者不需要了解中间的处理逻辑,一旦处理逻辑发生变化,只需要修改存储过程即可,而对调用者的程序完全没有影响。

  另外,和视图的创建语法稍微有点不同,存储过程和函数的CREATE语法不支持使用CREATE OR REPLACE 对存储过程和函数进行修改,如果需要对已有对存储过程或者函数进行修改,需要执行ALTER语法。

  2.2、删除存储过程或者函数

  一次只能删除一个存储过程或者函数,删除存储过程或者函数需要有该过程或者函数的 ALTER ROUTINE 权限,具体语法如下:  

  DROP  {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

  2.3 、查看存储过程或者函数

    2.3.1、查看存储过程或者函数的状态

      SHOW  {PROCEDURE | FUNCTION } STATUS [ LIKE 'PATTERN' ]

    

    2.3.2、查看存储过程或者函数的定义

      SHOW CREATE { PROCEDURE | FUNCTION } sp_name

 

   

    

原文地址:https://www.cnblogs.com/dyh2025/p/8697823.html