数据库:实验七函数与触发器

一、定义、调用参数函数

编程要求

根据提示,在右侧编辑器补充代码。
定义、调用参数函数(func_sqty):查询返回指定供应商的供应零件总数量。

use demo;

#代码开始
#定义、调用参数函数(func_sqty):查询返回指定供应商的供应零件总数量。
DELIMITER $$
CREATE FUNCTION func_sqty(in_sno CHAR(20))
RETURNS INT DETERMINISTIC
BEGIN
	DECLARE num INT;
	SELECT sum(qty) INTO num FROM spj WHERE sno = in_sno;
	RETURN num;
END $$
DELIMITER ;


#代码结束

select func_sqty('S1');
select func_sqty('S2');
select func_sqty('S3');

二、触发器应用(1)

编程要求

定义一个触发器(tr_spj_insert),完成向SPJ表新增数据时,及时更新所有供应商供应零件总数量。
根据提示,在右侧编辑器补充代码。

use demo;

#定义一个触发器(tr_spj_insert),完成向SPJ表新增数据时,及时更新所有供应商供应零件总数量。
#代码开始
DELIMITER $$
CREATE TRIGGER tr_spj_insert AFTER
INSERT ON spj FOR EACH ROW 
BEGIN
DECLARE sumqty INT;
SELECT sum(qty) INTO sumqty FROM spj WHERE sno =new.sno;
UPDATE s SET sqty =sumqty WHERE sno=new.sno;
END$$
DELIMITER ;




#代码结束

#以下代码不要改动或删除,将会对创建的触发器进行测试
insert into spj values
('S1','P1','J1',200),
('S1','P1','J3',100),
('S1','P1','J4',700),
('S1','P2','J2',100),
('S2','P3','J1',400),
('S2','P3','J2',200),
('S2','P3','J4',500),
('S2','P3','J5',400),
('S2','P5','J1',400),
('S2','P5','J2',100),
('S3','P1','J1',200),
('S3','P3','J1',200),
('S4','P5','J1',100),
('S4','P6','J3',300),
('S4','P6','J4',200),
('S5','P2','J4',100),
('S5','P3','J1',200),
('S5','P6','J2',200),
('S5','P6','J4',500); 

三、触发器应用(2)

编程要求

定义一个触发器(tr_spj_delete),完成向SPJ表删除数据时,及时更新所有供应商供应零件总数量。
根据提示,在右侧编辑器补充代码。

use demo;

#定义一个触发器(tr_spj_delete),完成向SPJ表删除数据时,及时更新所有供应商供应零件总数量。
#代码开始
DELIMITER $$
CREATE TRIGGER tr_spj_delete AFTER 
DELETE ON spj FOR EACH ROW
BEGIN
DECLARE sumqty INT;
SELECT sum( qty ) INTO sumqty FROM spj WHERE sno = old.sno;
UPDATE s SET sqty = sumqty WHERE sno = old.sno;
END$$
DELIMITER ;


#代码结束

#以下代码不要改动或删除,将会对创建的触发器进行测试
DELETE FROM spj WHERE sno='S1' AND pno='P1' AND jno='J1';

四、触发器应用(3)

编程要求

定义一个触发器(tr_spj_delete),完成向SPJ表删除数据时,及时更新所有供应商供应零件总数量。
根据提示,在右侧编辑器补充代码。

use demo;

#定义一个触发器(tr_spj_update),完成向SPJ表更新数据时,及时更新所有供应商供应零件总数量。
#代码开始
DELIMITER $$
CREATE TRIGGER tr_spj_update AFTER 
UPDATE ON spj FOR EACH ROW
BEGIN
DECLARE sumqty INT;
SELECT sum( qty ) INTO sumqty FROM spj WHERE sno = old.sno;
UPDATE s SET sqty = sumqty WHERE sno = old.sno;
SELECT sum( qty ) INTO sumqty FROM spj WHERE sno = new.sno;
UPDATE s SET sqty = sumqty WHERE sno = new.sno;
END$$
DELIMITER ;





#代码结束

#以下代码不要改动或删除,将会对创建的触发器进行测试
UPDATE spj SET sno='S1' WHERE sno='S2' AND pno='P3' AND jno='J1';
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值