翼度科技»论坛 编程开发 mysql 查看内容

实验六 存储过程

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
实验六 存储过程

第1关:增加供应商相关列sqty
  1. use demo;
  2. #代码开始
  3. #在S表中增加一列供应零件总数量(sqty),默认值为0。
  4. altertable s add sqty intdefault0;
  5. #代码结束
  6. desc s;
复制代码
第2关:定义、调用简单存储过程
  1. use demo;
  2. #代码开始
  3. #1、定义简单存储过程:计算所有供应商供应零件总数量并修改供应商相关列sqty。
  4. DELIMITER //
  5. createprocedure proc\_1()--in p\_sno char(2)--
  6. begin
  7.    update s set sqty =(selectsum(qty)from spj where spj.sno = s.sno);
  8. end//
  9. #2、调用存储过程。
  10. call proc\_1();
  11. #代码结束
  12. select\*from s;
复制代码
第3关:定义、调用带参数存储过程(1)
  1. use demo;
  2. #代码开始
  3. #1、定义带参数存储过程:查询返回指定供应商的供应零件总数量。
  4. dropprocedureifexists proc\_b;
  5. DELIMITER $$
  6. createprocedure proc\_b(IN p\_sno char(2),OUT p\_sqty int)
  7. begin
  8.     selectsum(qty)into p\_sqty from spj where sno = p\_sno;
  9. end$$
  10. #2、调用带参数存储过程。
  11. #以供应商S1为参数,调用存储过程,将结果存入@sqty1
  12. call proc\_b('S1', @sqty1);
  13. -- set @sqty1 = 1100;
  14. -- select @sqty1;
  15. #以供应商S2为参数,调用存储过程,将结果存入@sqty2
  16. call proc\_b('S2', @sqty2);
  17. -- set @sqty2 = 2000;
  18. -- select @sqty2;
  19. #代码结束
  20. select @sqty1,@sqty2
复制代码
第4关:定义、调用带参数存储过程(2)
  1. use demo;
  2. #代码开始
  3. #1、定义带参数存储过程:插入一个指定供应商信息 ('S6','泰欣',40,'十堰')(所有信息由参数提供)。
  4. DELIMITER $$
  5. CREATEPROCEDURE proc\_insert (
  6. p\_sno CHAR ( 2 ), -- 供应商编号
  7. p\_sname VARCHAR ( 10 ), -- 供应商名称
  8. p\_status INT, -- 供应商状态
  9. p\_city VARCHAR ( 10 ) -- 供应商城市
  10. )
  11. BEGIN
  12. DECLARE v\_count INT; -- 声明一个变量用于存储供应商数量
  13. SELECTCOUNT(\*) INTO v\_count FROM s WHERE sno = p\_sno; -- 查询是否存在相同编号的供应商
  14. IF v\_count \>0THEN-- 如果存在,提示错误信息
  15. SELECT'供应商已存在,请重新插入!';
  16. ELSEIF v\_count =0THEN-- 如果不存在,插入新的供应商信息
  17. INSERTINTO s (sno, sname, status, city) VALUES (p\_sno, p\_sname, p\_status, p\_city);
  18. END IF;
  19. END$$
  20. #2、调用带参数存储过程。
  21. CALL proc\_insert ('S6','泰欣',40,'十堰'); -- 调用存储过程,传入参数
  22. SELECT\*FROM s WHERE sno ='S6'; -- 查询插入的结果
  23. #代码结束
复制代码
第5关:定义、调用带参数存储过程(3)
  1. use demo;
  2. #代码开始
  3. #1、定义带参数存储过程:删除指定零件代码的供应信息,并返回删除的元组数。
  4. DELIMITER $$
  5. dropprocedureifexists proc\_delete$$
  6. createprocedure proc\_delete(IN p\_pno char(4),OUT p\_count int)
  7. begin
  8.     deletefrom spj where pno = p\_pno;
  9.     -- set p\_count = row\_count();
  10.     selectrow\_count()into p\_count;
  11. end$$
  12. #2、调用带参数存储过程。
  13. #以零件代码P5为参数,调用存储过程,将结果存入@p\_count1
  14. call proc\_delete('P5', @p\_count1);
  15. #以零件代码P6为参数,调用存储过程,将结果存入@p\_count2
  16. call proc\_delete('P6', @p\_count2);
  17. #代码结束
  18. select @p\_count1,@p\_count2
复制代码
第6关:定义、调用带参数存储过程(4)
  1. use demo;
  2. #代码开始
  3. #1、定义带参数存储过程:修改指定代码项目的其它信息(所有信息由参数提供)。
  4. DELIMITER $$
  5. CREATEPROCEDURE proc\_update (
  6. p\_jno CHAR ( 2 ), -- 项目编号
  7. p\_jname VARCHAR ( 10 ), -- 项目名称
  8. p\_city VARCHAR ( 10 ) -- 项目城市
  9. )
  10. BEGIN
  11. DECLARE p\_count INT; -- 声明一个变量用于存储项目数量
  12. SELECTCOUNT(\*) INTO p\_count FROM j WHERE jno = p\_jno; -- 查询是否存在指定编号的项目
  13. IF p\_count \> 0 THEN-- 如果存在,更新项目信息
  14. UPDATE j SET jname = p\_jname, city = p\_city WHERE j.jno = p\_jno;
  15. END IF;
  16. END$$
  17. #2、调用带参数存储过程。
  18. # 修改工程项目代码 J7(jno) 的信息为: 汽车制造厂 (jname) 十堰 (city)
  19. CALL proc\_update ('J7', '汽车制造厂', '十堰');
  20. #代码结束
  21. select \* from j where jno = 'J7';
复制代码
来源:https://www.cnblogs.com/moeyur/p/17386670.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具