当前位置:首页 > Mysql教程 > 列表

mysql存储过程语法学习笔记

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-01 21:25:18 浏览: 评论:0 

mysql存储过程是各种数据库内置的一个功能,它可以提高数据库各种性能,下面我来给大家分享一下我学习存储过程的些知识,大家有兴趣一起来看看.

今天又把mysql存储过程学习了下,大家先看以下代码,对语法不懂的朋友,可以详细看下语法结构,代码如下:

  1. CREATE PROCEDURE and CREATE FUNCTION Syntax 
  2. CREATE 
  3.     [DEFINER = { user | CURRENT_USER }] 
  4.     PROCEDURE sp_name ([proc_parameter[,...]]) 
  5.     [characteristic ...] routine_body 
  6. CREATE 
  7.     [DEFINER = { user | CURRENT_USER }] 
  8.     FUNCTION sp_name ([func_parameter[,...]]) 
  9.     RETURNS type 
  10.     [characteristic ...] routine_body 
  11. proc_parameter: 
  12.     [ IN | OUT | INOUT ] param_name type 
  13. func_parameter: 
  14.     param_name type 
  15. type: 
  16.     Any valid MySQL data type 
  17. characteristic: 
  18.     COMMENT 'string' 
  19.   | LANGUAGE SQL 
  20.   | [NOT] DETERMINISTIC 
  21.   | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } 
  22.   | SQL SECURITY { DEFINER | INVOKER } 
  23. routine_body:  --phpfensi.com 
  24.     Valid SQL routine statement 

例,代码如下:

  1. DELIMITER $$ /*改变语句的结束符*/ 
  2. USE `test`$$ /*选择数据库*/ 
  3. DROP PROCEDURE IF EXISTS `outgo`$$ /*存在outgo存储过程就删除*/ 
  4. CREATE DEFINER=`root`@`%` PROCEDURE `outgo`(IN v_table CHAR(10), IN v_id INT(2), OUT v_value VARCHAR(32)) 

调用存储过程的语法是call.如下:

  1. mysql> call outgo('user', 2, @a); 
  2. +----+--------------+ 
  3. | id | title        | 
  4. +----+--------------+ 
  5. |  2 | 你大爷的     | 
  6. +----+--------------+ 
  7. 1 row in set (0.00 sec) 
  8. Query OK, 0 rows affected (0.00 sec) 
  9. mysql> call outgo('user', 1, @a);  
  10. +----+--------------------+ 
  11. | id | title              | 
  12. +----+--------------------+ 
  13. |  1 | 我来测试一记       | 
  14. +----+--------------------+ 
  15. 1 row in set (0.00 sec) 

其中调用中文的时候可能会出现Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (latin1_swedish_ci,NUMERIC), (utf8_general_ci,COERCIBLE) for operation 'concat'这是由于编码不一致导致的。

Tags: mysql存储过程 mysql存储语法

分享到: