Oracle实验六 存储过程和函数
第1关:函数
1、创建函数Fs1,传入课程号,返回字符型。返回该课程的先行课名。若该课程不存在,则返回格式如下(3)所示,若该课程没有先行课,则返回格式如下(2)所示。
要求:
1、不能在函数中使用dbms_output.put_line打印数据,必须是通过Return将结果传出。
2、创建完函数后,请使用匿名块多次调用该函数,分别按顺序传入‘C06’,‘C01’,‘C001’。并将返回的结果分别打印出来。
输出格式说明:
(1)若传入课程有先行课(冒号为中文状态下的冒号):
(通过传入的课程号查询出的课程名)课程的先行课为:(先行课名)
例如:Oracle课程的先行课为:数据库
(2)若传入的课程没有先行课(cpno为null):
(通过传入的课程号查询出的课程名)课程没有先行课。
(3)若传入的课程不存在:
(传入的课程号)课程不存在。
--传入课程号,得出学生的相关信息
create or replace function Fs1(vcno Course.cno%type)
return Course.cpno%type
is
vcpno Course.cpno%type;
vpcname Course.cname%type;
vcname Course.cname%type;
begin
select cname into vcname from Course where cno=vcno;
begin
select cpno into vcpno from Course where cno=vcno;
select cname into vpcname from Course where cno=vcpno;
return (vcname||'课程的先行课为:'||vpcname);
exception when no_data_found then
return (vcname||'课程没有先行课。');
end;
exception when no_data_found then
return (vcno||'课程不存在。');
end;
--***********完成测试程序*****************
begin
dbms_output.put_line(Fs1('C06'));
dbms_output.put_line(Fs1('C01'));
dbms_output.put_line(Fs1('C001'));
end;
2、创建函数Fs2,传入学生学号,返回数值型。返回该学生选课的成绩的课程数,若该学生不存在,则返回-1。
要求:
1、不能在函数中使用dbms_output.put_line打印数据,必须是通过Return将结果传出。
2、创建完函数后,请使用匿名块调用该函数,多次调用函数,分别按顺序传入‘001’,‘018’,‘123’。并将返回的结果分别按要求打印出来。
若返回-1,则打印:
001号同学不存在。
若返回选课数,则打印(冒号为中文状态下的冒号):
001号同学的选课门数为:(返回的选课数)
create or replace function Fs2(vsno Student.sno%type)
return number
is
vvsno SC.sno%type;
cnt number;
begin
select sno into vvsno from Student where sno=vsno;
begin
select count(*) into cnt from SC where sno=vvsno;
return cnt;
end;
exception when no_data_found then
return -1;
end;
--测试程序
begin
if(Fs2('001')=-1) then
dbms_output.put_line('001号同学不存在。');
else
dbms_output.put_line('001号同学的选课门数为:'||Fs2('001'));
end if;
if(Fs2('018')=-1)then
dbms_output.put_line('018号同学不存在。');
else
dbms_output.put_line('018号同学的选课门数为:'||Fs2('018'))