Oracle实验六 存储过程和函数

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'))
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值