MySQL存储过程和函数(3) - 存储过程

   存储过程是一组复合sql语句,不直接返回一个结果,但可以用来完成一组逻辑处理或是生成一个结果集并传递给客户。

1.定义语法

CREATE PROCEDURE sp_name ([ proc_parameter[,...]])
      [ characteristic ...]  routine_body
                                                                                                    
proc_parameter:
      [ IN | OUT | INOUT ]  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 SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'
                                                                                                    
routine_body:
      Valid SQL procedure statement or statements


2.修改存储过程:在不重建存储过程的前提下,只能够修改存储过程的characteristic属性。若需要改变存储过程包含的语句和逻辑过程,则只能够drop procedure后重新create

ALTER PROCEDURE proc_name [characteristic …]
characteristic:
      COMMENT 'string'
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }


3.删除存储过程

DROP PROCEDURE [IF EXISTS] proc_name

4.查看存储过程:显示MySQL中所有数据库中定义的存储过程信息(可直接查询mysql.proc表中type=’PROCEDURE’的记录)

SHOW PROCEDURE STATUS

5.调用存储过程

CALL proc_name([parameter[,…]]);

   存储过程不返回任何值,因此不能够用在表达式中,只能够通过CALL语句来调用。因为存储过程来运算并实现某种效果或动作而无需返回一个值。如果需要使用存储函数运算过程中产生的结果,可以使用OUTINOUT标注对应的变量。

6.用例

mysql> delimiter //
   
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
      ->  BEGIN
      ->    SELECT COUNT(*) INTO param1 FROM t;
      ->  END
      ->  //
Query OK, 0 rows affected (0.00 sec)
   
mysql> delimiter ;
   
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)
   
mysql> SELECT @a;
+------+
| @a    |
+------+
| 3       |
+------+
1 row in set (0.00 sec)



你可能感兴趣的:(mysql,存储过程,存储函数)