pl/sql编写一个匿名块

编写一个匿名块,实现输入一个学生的学号,输出该学生的姓名,性别和专业。如果出现异常,则输出”程序出现错误,请与管理员联系”。(20分)

 

(2)编写一个匿名块,统计某系学生人数,如果没有学生,则显示“**系还没有学生”。执行程序,体会IF…ELSE的用法。(20分)

 

(3)编写一个匿名块,对SC表中的某学生的某一门成绩进行等级评定。评定规则为:成绩大于等于90,为优秀;成绩小于90而大于等于80,为良好;成绩小于80而大于等于70,为中等;成绩小于70而大于等于60,为及格;成绩小于60,为不及格。其它情况,为待定。执行程序,体会CASE的用法。(30分)

 

(4)编写一个匿名块,计算从m-n的数据之和。(30分)

解答:

(1)编写一个匿名块,实现输入一个学生的学号,输出该学生的姓名,性别和专业。如果出现异常,则输出”程序出现错误,请与管理员联系”。(20分)

-- 声明一个变量,用于存储输入的学号

DECLARE

  v_sno VARCHAR2(10);

-- 声明一个游标,用于查询学生信息

CURSOR c_student IS

  SELECT sname, sex, major FROM student WHERE sno = v_sno;

-- 声明一个记录类型,用于存储游标返回的结果

c_student_rec c_student%ROWTYPE;

BEGIN

  -- 输入学号

  v_sno := &sno;

  -- 打开游标

  OPEN c_student;

  -- 获取游标返回的第一行数据

  FETCH c_student INTO c_student_rec;

  -- 如果游标有数据,则输出学生信息

  IF c_student%FOUND THEN

    DBMS_OUTPUT.PUT_LINE('姓名:' || c_student_rec.sname);

    DBMS_OUTPUT.PUT_LINE('性别:' || c_student_rec.sex);

    DBMS_OUTPUT.PUT_LINE('专业:' || c_student_rec.major);

  ELSE

    -- 如果游标没有数据,则输出提示信息

    DBMS_OUTPUT.PUT_LINE('没有找到该学号对应的学生');

  END IF;

  -- 关闭游标

  CLOSE c_student;

EXCEPTION

  -- 如果出现异常,则输出错误信息

  WHEN OTHERS THEN

    DBMS_OUTPUT.PUT_LINE('程序出现错误,请与管理员联系');

END;

```

 

(2)编写一个匿名块,统计某系学生人数,如果没有学生,则显示“**系还没有学生”。执行程序,体会IF…ELSE的用法。(20分)

 

```sql

-- 声明一个变量,用于存储输入的系名

DECLARE

  v_dname VARCHAR2(20);

-- 声明一个变量,用于存储统计结果

v_count NUMBER;

BEGIN

  -- 输入系名

  v_dname := &dname;

  -- 查询某系学生人数,并赋值给变量v_count

  SELECT COUNT(*) INTO v_count FROM student WHERE dname = v_dname;

  -- 如果v_count大于0,则输出统计结果

  IF v_count > 0 THEN

    DBMS_OUTPUT.PUT_LINE(v_dname || '系共有' || v_count || '名学生');

  ELSE

    -- 如果v_count等于0,则输出提示信息

    DBMS_OUTPUT.PUT_LINE(v_dname || '系还没有学生');

  END IF;

END;

```

 

(3)编写一个匿名块,对SC表中的某学生的某一门成绩进行等级评定。评定规则为:成绩大于等于90,为优秀;成绩小于90而大于等于80,为良好;成绩小于80而大于等于70,为中等;成绩小于70而大于等于60,为及格;成绩小于60,为不及格。其它情况,为待定。执行程序,体会CASE的用法。(30分)

 

```sql

-- 声明两个变量,用于存储输入的学号和课程号

DECLARE

  v_sno VARCHAR2(10);

  v_cno VARCHAR2(10);

-- 声明一个变量,用于存储查询结果

v_grade NUMBER;

BEGIN

  -- 输入学号和课程号

  v_sno := &sno;

  v_cno := &cno;

  -- 查询某学生某课程的成绩,并赋值给变量v_grade

  SELECT grade INTO v_grade FROM sc WHERE sno = v_sno AND cno = v_cno;

  -- 根据成绩进行等级评定,并输出结果

  DBMS_OUTPUT.PUT_LINE('该学生该课程的成绩等级为:' ||

                       CASE

                         WHEN v_grade >= 90 THEN

                           '优秀'

                         WHEN v_grade < 90 AND v_grade >= 80 THEN

                           '良好'

                         WHEN v_grade < 80 AND v_grade >= 70 THEN

                           '中等'

                         WHEN v_grade < 70 AND v_grade >= 60 THEN

                           '及格'

                         WHEN v_grade < 60 THEN

                           '不及格'

                         ELSE

                           '待定'

                       END);

END;

```

 

(4)编写一个匿名块,计算从m-n的数据之和。(30分)给代码添加注释

 

```sql

-- 声明两个变量,用于存储输入的m和n

DECLARE

  v_m NUMBER;

  v_n NUMBER;

-- 声明一个变量,用于存储计算结果

v_sum NUMBER := 0;

BEGIN

  -- 输入m和n

  v_m := &m;

  v_n := &n;

  -- 使用循环语句,从m到n累加,并赋值给变量v_sum

  FOR i IN v_m .. v_n LOOP

    v_sum := v_sum + i;

  END LOOP;

  -- 输出计算结果

  DBMS_OUTPUT.PUT_LINE('从' || v_m || '到' || v_n || '的数据之和为:' || v_sum);

END;

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值