Home >Database >Mysql Tutorial >MySQL 存储过程和函数

MySQL 存储过程和函数

WBOY
WBOYOriginal
2016-06-07 17:20:381011browse

一个存储程序是可以被存储在服务器中的一套SQL语句。可以通过客户端用CREATE PROCEDURE和CREATE FUNCTION 创建一个存储过程或函

一个存储程序是可以被存储在服务器中的一套SQL语句。可以通过客户端用CREATE PROCEDURE和CREATE FUNCTION  创建一个存储过程或函数。在客户端通过CALL语句 调用所创建的存数过程或函数。

语法:

创建存储子程序:

CREATE PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body
CREATE FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body
    proc_parameter:
    [ IN | OUT | INOUT ] param_name type
    func_parameter:
    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

 

默认地,子程序与当前数据库关联。要明确地把子程序与一个给定数据库关联起来,可以在创建子程序的时候指定其名字为db_name.sp_name。在 程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在 程序体中的;定界符被传递到服务器而不是被mysql自己来解释。例如:

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)

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn