mysql存储过程与函数------创建存储过程与函数

创建过程和创建函数的语法

CREATE PROCEDURE and CREATE FUNCTION Syntax

先给出测试用表

//测试用表
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=215 DEFAULT CHARSET=utf8;
//官方文档
CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

CREATE
    [DEFINER = { user | CURRENT_USER }]
    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


上面就是官方给出的存储过程和自定义函数的语法模板。

创建存储过程的例子:

//创建存储过程simpleproc
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
    SELECT COUNT(*) INTO param1 FROM t_user;
END;
  • simpleproc 该存储过程的名字
  • OUT param1 INT, param1是参数,out表示param1是输出变量, int表示param1的数据类型
  • begin与end之间是执行的语句

创建完成之后,就可以调用该存储过程

//调用存储过程
CALL simpleproc(@a);
SELECT @a;

创建函数的例子:

CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
RETURN CONCAT('Hello ',s,'!');
  • hello是该函数的名字
  • s是参数的名字,CHAR(20)指定参数的数据类型和最大长度
  • RETURNS CHAR(50)指定返回值的数据类型和最大长度
  • CONCAT(‘Hello ‘,s,’!’);即将”Hello “, s, “!”拼接后返回

调用该函数

SELECT hello('world');

下面给出几个创建不同类型的存储过程的例子

1.带IN参数

//IN参数的
DROP PROCEDURE IF EXISTS sp_in;
CREATE PROCEDURE sp_insert(IN param CHAR(20))
BEGIN
    INSERT INTO t_user(id, name) VALUES (NULL, param);
END;

调用代码:

CALL sp_in('小小');

2.OUT参数

DROP PROCEDURE IF EXISTS sp_out;
CREATE PROCEDURE sp_out(OUT param CHAR(20))
BEGIN
    SELECT `name` INTO param FROM t_user LIMIT 1;
END;

调用代码:

SET @p = '';
CALL sp_out(@p);
SELECT @p;

3.INOUT参数

DROP PROCEDURE IF EXISTS sp_inout;
CREATE PROCEDURE sp_inout(INOUT param CHAR(20))
BEGIN
    SELECT `name` INTO param FROM t_user WHERE id = param;
END;

调用代码:

SET @p = '1';
CALL sp_out(@p);
SELECT @p;

4.其他(多参数)

//多IN参数的创建
DROP PROCEDURE IF EXISTS sp_moreParam1;
CREATE PROCEDURE sp_moreParam1(IN param1 INT,param2 CHAR(20))
BEGIN
    INSERT INTO t_user VALUES (param1, param2);
END;

//调用
SET @id = 100;
SET @pp = '小明';
CALL sp_moreParam(@id, @pp);
//IN参数和OUT参数
//创建
DROP PROCEDURE IF EXISTS sp_moreParam2;
CREATE PROCEDURE sp_moreParam2(IN param1 INT, OUT param2 CHAR(20))
BEGIN
    SELECT `name` INTO param2 FROM t_user WHERE id = param1;
END;
//调用
SET @id = 100;
SET @pp = '';
CALL sp_moreParam2(@id, @pp);
SELECT @pp;

你可能感兴趣的:(mysql)