1. 程式人生 > >MySQL儲存過程(帶輸入引數)例項

MySQL儲存過程(帶輸入引數)例項

第一次寫儲存過程,參考了《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,'廣州');