存储过程mysql版
书中给的例子只有Oracle和SQL Server版本,而我只有mysql数据库。以下为书中例子用mysql数据库的另一种写法。
一、P182:对邮件发送清单中具有邮件地址的顾客进行计数
DELIMITER //
create procedure mailinglistcount (out listcount integer)
begin
select count(*) into listcount
from customers
where not cust_email is null;
select listcount;
end //
DELIMITER ;
-- 调用存储过程
CALL mailinglistcount(@l1);
结果如图:
验证结果:
二、P184:在orders表中插入一个新订单
DELIMITER //
create procedure neworder (in newcust_id integer,out newnum integer)
begin
select max(order_num) + 1 into newnum
from orders;
insert into orders(order_num, order_date, cust_id)
values(newnum, current_date(), newcust_id);
select newnum, current_date(), newcust_id;
end //
DELIMITER ;
-- 调用存储过程
CALL neworder(1000000007,@n1);
验证结果:
检验结果正确:
总结
- 存储过程类似于“封装”:简单、安全、高性能,缺陷就是不同的DBMS语法不同😢
- 触发器(与单个的表相关联)是特殊的存储过程,在特定的数据库活动发生时自动执行(insert、update、delete及其组合)。