利用pl/sql块解决复杂sql查询

Ss (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
Cc (C#,CN ) C#,CN 分别代表课程编号、课程名称

SCsc ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩


1 列出既学过“1”号课程,又学过“2”号课程的学生且“1”号课成绩比“2”号成绩高的学生学号

Select SC1.Sid,SC1.g as "1号课成绩",SC2.g as "2号课成绩" FROM SCsc SC1,Cc C1,SCsc SC2,Cc C2 Where SC1.Cid=C1.Cid    AND C1.cn='1' AND         SC2.Cid=C2.Cid      AND      C2.cn='2' AND SC1.g>SC2.g;

2 利用pl/sql编程解决

declare 
----------列出既学过“1”号课程,又学过“2”号课程的所有学生编号----------------
cursor c_cursor is select sid from scsc where cid in ('1','2') group by sid having count(cid) =2;
v_c1G  scsc.g%type;
v_c2G  scsc.g%type;
v_sql  varchar2(100);
begin
   for  v_sid in c_cursor loop--open c_cursor
        v_sql:='select g from scsc  where sid='||v_sid.sid||' and cid=1';
        execute immediate v_sql into v_c1G;--execute dynamic sql
        v_sql:='select g from scsc  where sid='||v_sid.sid||' and cid=2';
        execute immediate v_sql into v_c2G;--execute dynamic sql
        if(v_c1G > v_c2G) then
            --列出既学过“1”号课程,又学过“2”号课程的学生
            --且“1”号课成绩比“2”号成绩高的学生学号
            dbms_output.put_line('sid='||v_sid.sid);
        end if;
   end loop;
end;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值