## 创建一个不带返回值的存储过程 ##
DELIMITER $$
Drop Procedure If Exists proc_name; $$
Create Procedure proc_name(
in num1 int,
in num2 int
)
BEGIN
set @a = 2000000001;
set @d = 20000001;
set @e = 18200000000;
WHILE @a<2000010001 Do
set @b=rand_string(5);
set @c=rand_sex(1);
insert into students values(@a, @b, @c, @d, @e);
if @a%100=0 then
set @d=@d+1 ;
end if;
End WHILE ;
END $$
DELIMITER ; //注意:delimiter 分号前必须有空格,否则报错
执行存储过程:
Set @n1= 1;
Set @n2=10;
call proc_name(@n1, @n2);
## 创建带有返回值的存储过程 ##
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_name_out; $$
CREATE PROCEDURE proc_name_out (
out n int
)
BEGIN
SELECT COUNT(*) INTO n FROM employee ;
END $$
DELIMITER ;
-- MYSQL调用存储过程
执行存储过程:CALL proc_employee_getCount(@n) ;
## 创建事务 ##
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_trans; $$
CREATE PROCEDURE proc_trans(
in p1 varchar(20) ,
in p2 varchar(50)
)
BEGIN
declare err int default 0;
declare continue handler for sqlexception set err = 1; -- 如果出现sql异常,则将err设置为1后继续执行后面的操作
Set AutoCommit = 0; -- 开启事务
-- 批量插入数据 --
insert into sy_queryconfig(syq_id) values(p1);
insert into sy_queryconfig(syq_id) values(p2);
if err=1 then
ROLLBACK;
else
COMMIT;
end if ;
END $$
DELIMITER ;
## 创建事务,有任何异常即回滚 ##
DELIMITER $$
DROP PROCEDURE IF EXISTS proc_trans; $$
CREATE PROCEDURE proc_trans (
in p1 VARCHAR(20),
in p2 VARCHAR(50)
)
BEGIN
declare exit handler for sqlexception -- 只要发生异常就回滚
begin
Rollback ;
end ;
-- 返回异常处理结果等其它操作 --
Start TransAction ;
insert into sy_queryconfig(syq_id) values(p1);
insert into sy_queryconfig(syq_id) values(p2);
Commit ;
END $$
DELIMITER ;