编写一个函数,根据传入的部门,统计出该部门的总工资和员工人数,并将统计值返回,同时,编写一个匿名块,测试此函数的正确性
1.创建type,用来存储查询结果
createor replace type tp_emp as object(sum number,cnum number);
/
2.创建function,用来查询总工资和员工人数。
createor replace function compute_dept(p_deptno number)
returntp_emp
is
v_sumnumber;
v_countnumber;
v_tptp_emp;
begin
v_tp:=tp_emp(0,0);
select trunc(sum(sal),0) ,count(*) intov_sum,v_count from emp where deptno=p_deptno;
v_tp.sum:=v_sum;
v_tp.cnum:=v_count;
return (v_tp);
exception
when no_data_found then
dbms_output.put_line('no this deptno');
when others then
dbms_output.put_line(sqlcode||''||sqlerrm);
end;
/
创建匿名块,用来调用function。
declare
v_sumnumber(5);
v_countnumber(5);
begin
v_sum:=compute_dept(101).sum;
v_count:=compute_dept(101).cnum;
dbms_output.put_line(v_sum||' '||v_count);
end;
/
这样处理下来,最后执行的匿名块不会报错,而会输出0,这是因为仅有多行函数的搜索语句,在没有找到数据的情况下也不会报no_data_found的exception。