一.创建存储过程简单语法:
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中被改变得值。