您的位置:首页 > 数据库 > MySQL

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

2013-07-03 10:36 411 查看
存储过程是一组复合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语句来调用。因为存储过程来运算并实现某种效果或动作而无需返回一个值。如果需要使用存储函数运算过程中产生的结果,可以使用OUT或INOUT标注对应的变量。
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)


本文出自 “自学能力是第一竞争力” 博客,请务必保留此出处http://baikkp.blog.51cto.com/3131132/1240563
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: