【数据库作业14】第五章: 数据库完整性 习题 + 存储过程

在这里插入图片描述
在这里插入图片描述

6

CREATE TABLE DEPT
(  
   Dno NUMBER(2),
   Dname VARCHAR(10),
   Mname VARCHAR(10),
   TL Char(12)
   CONSTRAINT PK_SC RIMARY KEY(Deptno)
);
CREATE TABLE EMP
(
   Eno NUMBER(4),
   Ename VARCHAR(10),
   Age NUMBER(2),
   CONSTRAINT C1 CHECK ( Aage<=60),
   Job VARCHAR(9),
   Sal NUMBER(7,2),
   Deptno NUMBER(2),
   CONSTRAINT FK_DEPTNO
   FOREIGN KEY(Deptno)
   REFFERENCES DEPT(Deptno)
);

已经建立了Student,SC , course(加入离散数学)三张表

在这里插入图片描述
先创建储存分段和人数的表

CREATE TABLE NUM
(
  division CHAR(20),   /*成绩划分*/
  number      INT       /*人数*/
);

储存过程

IF (exists (select * from sys.objects where name = 'count_dispersemath'))
DROP PROCEDURE count_dispersemath0
GO
CREATE OR REPLACE PROCEDURE fenshu() 
--定义存储过程
AS
DECLARE  @a90 INT,  --定义大于90分的人数
    @a8090 INT,  --定义大于80分的人数
    @a7080 INT,  --定义大于70分的人数
    @a6070 INT, --定义大于60分的人数
    @a60 INT;  --定义小于60分的人数
BEGIN
SELECT Cno
INTO countcno 
FROM course
WHERE Cname = '离散数学';
SELECT @a60=COUNT(*)
FROM SC
WHERE Cno = '8' AND Grade < 60;
SELECT  @a6070=COUNT(*)
FROM SC
WHERE Cno = '8' AND Grade >= 60 AND Grade < 70;
SELECT @a7080=COUNT(*)
FROM SC
WHERE Cno = '8' AND Grade >= 70 AND Grade < 80;
SELECT @a8090=COUNT(*)
FROM SC
WHERE Cno = '8' AND Grade >= 80 AND Grade < 90;
SELECT @a90=COUNT(*)
FROM SC
WHERE Cno = '8' AND Grade >= 90;
create table countScore( scorestage char(10), number smallint);
insert into countscore values('x<60', 60);
insert into countscore values('60<=x<70', 6070);
insert into countscore values('70<=x<80', 7080);
insert into countscore values('80<=x<90', 8090);
insert into countscore values('x>=90', 90);
END

在这里插入图片描述

CREATE OR REPLACE PROCEDURE  P() 
AS
BEGIN 
declare curname char(40) default ‘*‘; 
declare curcno char(4) default ‘**‘; 
declare curavg char(4); 
declare  mycursor cursor for 
select Cno, Cname 
from course;
open mycursor;
loop 
fetch mycursor into curcno, curname;  
    select avg(grade) into curavg from sc 
    where Cno = curcno; 
    insert into scoreavg values(curcno, curname, curavg); 
    end loop; 
close mycursor; 
END 

在这里插入图片描述

CREATE OR REPLACE PROCEDURE CP ()
AS
BEGIN
declare chgrade char(1) default 'A';
declare grade smallint(6) default 0;
declare ID int default 0;
declare  mycursor2 cursor for
    select grade from sc;
alter table sc add column(newgrade char(1));
open mycursor2;
    loop 
        fetch mycursor2 into grade;
        if grade < 60 then
            chgrade = 'E';
        elseif grade < 70 then
            chgrade = 'D';
        elseif grade < 80 then
            chgrade = 'C';
        elseif grade < 90 then
            chgrade = 'B';
        elseif
            chgrade = 'A';
        update id set id = id + 1 where id < 9
        update sc(id) set newgrade = chgrade;
    end loop;  
    close mycursor;
    END
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值