MySQL创建存储过程

来源:互联网 发布:知乎miya的米牙 编辑:程序博客网 时间:2024/05/23 19:09

一.创建存储过程简单语法:
CREATE PROCEDURE 存储过程名称(
  输入输出类型 变量名称 类型,

    输入输出类型 变量名称 类型

)
BEGIN
  – 声明, 语句要完成的操作,增删改查。。。
END

二:实例

先创建user表
DROP TABLE IF EXISTS ‘pr_user’;
CREATE TABLE ‘user’ (
‘id’ int(11) NOT NULL AUTO_INCREMENT,
‘username’ varchar(20) DEFAULT NULL,
‘age’ int(11) DEFAULT NULL,
‘password’ varchar(20) DEFAULT NULL,
PRIMARY KEY (‘id’)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

1.只带IN(输入参数)的存储过程
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值.

DROP PROCEDURE IF EXISTS pr_user_findById;
–创建存储过程:
CREATE PROCEDURE pr_user_findById(
IN n INT
)
BEGIN
SELECT * FROM person where id=n;
END;

–定义变量,调用存储过程:
SET @n=2;
CALL pr_user_findById(@n);

2.只带OUT(输出参数)的存储过程
该值可在存储过程内部被改变,并可返回。

–创建存储过程:
DROP PROCEDURE IF EXISTS pr_user_getCount;
CREATE PROCEDURE pr_user_getCount(
OUT n INT(11)
)
BEGIN
SELECT COUNT(*) INTO n FROM person ;
END ;

–调用存储过程:
CALL pr_user_getCount(@n);
SELECT @n as ‘总数’;

3.带IN(输入参数)和OUT(输出参数)的存储过程
调用时指定,并且可被改变和返回

–创建存储过程:
DROP PROCEDURE IF EXISTS pr_user_findInfoById;
CREATE PROCEDURE pr_user_findInfoById(
IN n INT(11),
OUT name VARCHAR(20),
OUT age INT(11)
)
BEGIN
SELECT id INTO n, username INTO name, age FROM person WHERE id=n;
END;

–定义变量,调用存储过程:
SET @id=2;
CALL pr_user_findInfoById(@id, @name, @age);
SELECT @id as ‘工号’, @name as ‘用户名’, @age as ‘年龄’;

4.带INOUT存储过程
可以理解为一个function在内部声明了global ,并可能对该变量值进行修改。

针对上下文情况:

set @b =’aa’;

call abc(@b); 在这个procedure中对b所对应的变量进行了操作,@所对应的procedure变量的初始值就是@b的值。

之后 select @b; 这时候,@b得值就是在procedure中被改变得值。

原创粉丝点击