MySQL存储过程(带输入参数)实例

本文介绍了如何在MySQL中编写一个存储过程,该过程涉及三张表的操作,包括插入数据到一张表,同时更新其他两张表。重点讨论了MySQL特有的语法和语句转义,以及示例存储过程的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次写存储过程,参考了《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,'广州');

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值