关闭

编写存储过程,对于有8个以上学生报名的课程,费用95折

102人阅读 评论(0) 收藏 举报
分类:

create or replace procedure discount 

is          --//声明部分

  cursor c_group_discount is         --声明游标,保存需要打折的课程编号和名称

    select distinct c.course_no,c.description  --distinct 这里要去重,防止重复打折 。查找满足条件的课程表编号和课程名称

      from enrollment e,section s,course c          --ENROLLMENT:注册表  SECTION:班级表   COURSE:课程表

      where e.section_id =s.section_id         --e表里的外键班级编号等于s表里的主键

        and s.course_no =c.course_no        --班级表里的课程编号外键等于c表里的主键  连接条件就是两个表里的主外键

        group by c.course_no,c.description,e.section_id  --按照课程编号,课程名称,以及班级编号进行分组,

--因为在不同的班里可能开同一门课,分完组后统计每一组中行的数量

        having count(*)>= 8;        --做一个三表连接查询来找到哪些课程需要打9.5

begin         --遍历游标,对课程进行打折

  for r_discount in c_group_discount loop   -- r_discount是一个记录变量名字

    update course                      --其实打折呢就是一个update语句

      set cost=cost*0.95

      wherecourse_no=r_discount.course_no;      --从记录里把课程编号拿出来

    dbms_output.put_line('一个5%的折扣给了以下课程:'   --每一次都输出下

     ||r_discount.course_no||' '||r_discount.description);

      

  end loop; 

end discount;



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:161224次
    • 积分:4434
    • 等级:
    • 排名:第7145名
    • 原创:295篇
    • 转载:0篇
    • 译文:1篇
    • 评论:2条
    文章分类
    最新评论