第一次写存储过程,参考了《SQL完全手册》,写了一个涉及到三张表的存储过程,简单实现了往一张表插入数据,修改另外两张表的功能。MySQL的语法和其他数据库语法有区别,写的过程需要特别注意。还有就是";"的问题,需要用DELIMITER //转义,因为在MySQL中,DELIMITER本身就是“;”的意思,具体这里不做详细说明。
DROP TABLE IF EXISTS `CUSTOMERS`;
create table CUSTOMERS (
`id` int(11) NOT NULL AUTO_INCREMENT, -- ID
`cust_num` int(11),-- 客户编号
`company` varchar(20),-- 公司名称
`cust_rep` int(11),-- 雇员
`credit_limit` decimal(16,2),-- 信用限额
PRIMARY KEY(`id`)
);
DROP TABLE IF EXISTS `SALESREPS`;
CREATE TABLE `SALESREPS`(
`id` int(11) NOT NULL AUTO_INCREMENT,-- ID
`quota` decimal(16,2),-- 销售目标
`empl_num` int(11),
PRIMARY KEY(`id`)
);
INSERT INTO `SALESREPS`(ID,QUOTA,EMPL_NUM) VALUES(1,20000.00,103);
DROP TABLE IF EXISTS `OFFICES`;
CREATE TABLE `OFFICES`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`target` decimal(16,2),
`city` varchar(20),
PRIMARY KEY(`id`)
);
INSERT INTO `OFFICES`(id,target,city) values(1,20000.00,'深圳');
DROP PROCEDURE IF EXISTS `ADD_CUST`;
DELIMITER //
CREATE PROCEDURE `ADD_CUST`(
in c_name varchar(20),
in c_num integer,
in cred_lim decimal(16,2),
in tgt_sls decimal(16,2),
in c_rep integer,
in c_offc varchar(20)
)
BEGIN
insert into customers (cust_num,company,cust_rep,credit_limit)
values(c_num,c_name,c_rep,cred_lim);
update salesreps
set quota=quota+quota+tgt_sls
where empl_num=c_rep;
update offices
set target =target+tgt_sls
where city=c_offc;
commit;
END //
call `ADD_CUST`('李四',504,200.00,500.00,309,'广州');