oracle 数据库 包 函数调用 实验六

时间:2024-03-19 21:47:12

系别

 

班级

 

学号

 

姓名

 

课程名称

Oracle数据库应用

实验日期

 

实验名称

 PL/SQL编程

成绩

 

实验目的:

掌握各种流程控制语句;

掌握用户自定义函数的使用。

掌握包的使用

实验条件:

微机1台、Oracle 11g

实验内容与步骤(结果抓图)

  1. 完成P158上机指导,并测试。

oracle 数据库 包 函数调用 实验六

2、在scott模式下建立包pkg1,包含如下函数(提示:先定义包头,再定义包体):

(1)函数fGetName, 能够根据员工编号获取姓名

 

oracle 数据库 包 函数调用 实验六

 

oracle 数据库 包 函数调用 实验六

 

 

(2)函数fRaiseSalary, 根据雇员编号,计算提升后的工资,规则如下:

如果职位(JOB属性)是CLEARK工资增长5%;

如果职位是SALESMAN,工资增长8%;

如果职位是MANAGE,工资增长10;

如果职位是ANALYST,工资增长20%;

如果职位是PRESIDENT工资不涨。

 

 

oracle 数据库 包 函数调用 实验六

 

oracle 数据库 包 函数调用 实验六oracle 数据库 包 函数调用 实验六

3、函数调用

(1)调用fGetName获取编号为7499员工的姓名,并输出结果。  

(提示:调用方法为:包名.函数名(参数))

oracle 数据库 包 函数调用 实验六oracle 数据库 包 函数调用 实验六

(2)调用fRaiseSalary获取“7499薪金,并输出结果。

 

实验总结(结论或问题分析):


 

create or REPLACE  package pkg1 is
   function fGetName(num_empno emp.empno%TYPE) RETURN varchar2
  function fRaiseSalary(num_empno emp.empno%TYPE) return NUMBER;  pkg1;

 



create or replace
package body pkg1 is
    function fGetName(num_empno emp.empno%TYPE)) RETURN varchar2 is
     num_ename emp.ename%type;
BEGIN 
  select Ename into num_ename from emp 
  where empno=num_empno;
  RETURN num_ename;
end fGetName;

 

 function fRaiseSalary(num_empno emp.empno%TYPE) return NUMBER AS
   num_sal number;
  num_job emp.job%type;
   Balancer number(3,2);
  BEGIN
  select job ,sal into num_job, num_sal  FROM emp where empno= num_empno;
     IF num_job>'CLEARK' then
Balancer:=0.05;

ELSIF num_job>'SALESMAN'  then
 Balancer:=0.08;
ELSIF num_job>'MANAGE' then
Balancer:=0.1;
   Elsif num_job>'ANALYST' then
  Balancer:=0.2;

 Elsif  num_job>'PRESIDENT' then
  Balancer:=0.00;
END IF;
    RETURN num_sal*(1+balancer);
  END fRaiseSalary;
Return num_sal*(1+balance);
end fRaiseSalary;

end pkg1;


select pkg1. fGetName(‘7499’)from duAl
begin
dbms_output.put_line(pkg1. fRaiseSalary (‘7499’) );
end;