MySQL儲存過程(帶輸入引數)例項
阿新 • • 發佈:2019-02-15
第一次寫儲存過程,參考了《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,'廣州');