《2022年实验四Transact-SQL数据库编程答案 .pdf》由会员分享,可在线阅读,更多相关《2022年实验四Transact-SQL数据库编程答案 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、试验四Transact-SQL 数据库编程1.编一程序用于判断XS数据表中是否有年龄小于18 岁的学生数据, 如果有则显示学生的人数,否则显示“没有年龄小于18 岁的学生数据” 。 set serveroutput on; declare n_count number(10); begin select count(*) into n_count from xs where to_number(to_char(sysdate,yyyy)-to_number(to_char(cssj,yyyy)18; if n_count=90 显示“优”平均成绩 =80 显示“良”平均成绩 =70 显示“中”
2、平均成绩 =60 显示“及格”平均成绩 =90 then 优 when avg(cj)=80 then 良 when avg(cj)=70 then 中 when avg(cj)=60 then 及格 else 不及格 end 平均成绩from xs,xs_kc where xs.xh=xs_kc.xh group by xs.xh,xm; 3.创建一个用户自定义函数,以学号和课程名称为参数,返回该学生指定课程的学习成绩。然后使用该函数查询学号“200901”同学“计算机网络”的成绩。Create or replace function func1 精选学习资料 - - - - - - - -
3、 - 名师归纳总结 - - - - - - -第 1 页,共 5 页(s_num in char,s_kcm in char) return number As n_cj number; Begin select cj into n_cj from xs_kc,kc where xs_kc.kch=kc.kch and xh=s_num and kcm=s_kcm; RETURN(n_cj); end func1; DECLARE man_num NUMBER; BEGIN man_num:=func1(200901, 计算机网络 ); dbms_output.put_line(to_char
4、(man_num); END; 4.创建一个游标,返回计算机专业每个同学的学号、姓名、课程名称和成绩。DECLARE v_xh char(6); v_xm char(8); v_kcm char(20); v_cj number(2); CURSOR XS_CUR3 IS SELECT xs.xh,xm,kcm,cj FROM xs,kc,xs_kc WHERE xs.xh=xs_kc.xh and kc.kch=xs_kc.kch and ZYM=计算机 ; BEGIN OPEN XS_CUR3; FETCH XS_CUR3 INTO v_xh,v_xm,v_kcm,v_cj; WHILE
5、XS_CUR3%FOUND LOOP dbms_output.put_line(v_xh| |v_xm| |v_kcm| |to_char(v_cj); FETCH XS_CUR3 INTO v_xh,v_xm,v_kcm,v_cj; END LOOP; CLOSE XS_CUR3; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 5 页END; 5.创建一个用户自定义函数,以学号为参数,返回指定学生的各科成绩及总成绩。然后使用该函数查询学号为“200901”学生的各科成绩及总成绩。Create or replace function
6、func2 (s_num in char) return number As n_cj number; Begin DECLARE v_kcm char(20); v_cj number(2); CURSOR XS_CUR3 IS SELECT kcm,cj FROM xs_kc,kc WHERE kc.kch=xs_kc.kch and xs_kc.xh=s_num; BEGIN OPEN XS_CUR3; FETCH XS_CUR3 INTO v_kcm,v_cj; WHILE XS_CUR3%FOUND LOOP dbms_output.put_line(v_kcm| |to_char(
7、v_cj); FETCH XS_CUR3 INTO v_kcm,v_cj; END LOOP; CLOSE XS_CUR3; END; SELECT sum(cj) into n_cj FROM xs_kc,kc WHERE kc.kch=xs_kc.kch and xs_kc.xh=s_num; return(n_cj); end func2; DECLARE man_num number; BEGIN 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 5 页man_num:=func2(200901); dbms_output.put
8、_line( 总成绩 | |to_char(man_num); END; 6.创建一用户自定义的函数,用于统计某一课程在每个分数段的人数。分数段分为:低于60 分, 6070 分, 70 80 分, 8090 分, 90100 分。课程名低于 60 60707080809090100计算机基础0 3 7 5 4 CREATE OR REPLACE FUNCTION rs (v_kcm in char,cj1 out number,cj2 out number,cj3 out number,cj4 out number,cj5 out number) RETURN NUMBER AS zs NU
9、MBER; BEGIN SELECT count(xh) INTO cj1 FROM xs_kc,kc where xs_kc.kch=kc.kch and kcm=v_kcm and cj=60 and cj=70 and cj=80 and cj=90 ; SELECT count(xh) INTO zs FROM xs_kc,kc where xs_kc.kch=kc.kch and kcm=v_kcm; RETURN(zs); END rs; DECLARE kcm char(10):= 计算机网络 ; zs number; cj1 number; 精选学习资料 - - - - - -
10、 - - - 名师归纳总结 - - - - - - -第 4 页,共 5 页cj2 number; cj3 number; cj4 number; cj5 number; BEGIN zs:=rs(kcm,cj1,cj2,cj3,cj4,cj5); dbms_output.put_line( 计算机网络共有| |to_char(zs); dbms_output.put_line( 不及格的有 | |to_char(cj1); dbms_output.put_line( 及格有 | |to_char(cj2); dbms_output.put_line( 中有 | |to_char(cj3); dbms_output.put_line( 良有 | |to_char(cj4); dbms_output.put_line( 优有 | |to_char(cj5); END; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 5 页