--查看所有雇员的工资
--view(当用户输入view后提示用户输入查看第几页,每页显示几条记录,排序关键列)
create or replace package pack1 is
type my_cursor_type is ref cursor;
end;
create or replace procedure fenye(v_pagenow in number,v_pagesize in number,v_field in varchar2,v_out_res out pack1.my_cursor_type)is
v_sql varchar2(2000);
v_start number;
v_end number;
begin
v_start:=v_pagesize*(v_pagenow-1)+1;
v_end:=v_pagesize*v_pagenow;
v_sql:='select t2.* from (select t1.*,rownum rn from ( select * from emp order by '||v_field||')t1 where rownum<='||v_end||')t2 where rn>='||v_start;
open v_out_res for v_sql;
end;
--案例:请编写一个函数,可以接收用户名并返回该用户的年薪.
create function fun1(v_ename varchar2)
return number is
v_annual_sal number;
begin
select (sal+nvl(comm,0))*12 into v_annual_sal from emp where ename=v_ename;
return v_annual_sal;
end;
--请编写一个包,该包有一个过程,该过程可以接收用户名和新的薪水,
--(将来用于通过用户名去更新薪水)还有一个函数,该函数可以接收一个用户名(将来要实现得到该用户的年薪是多少)
create package pack1 is
procedure pro1(v_ename varchar2,v_new_sal number);
function fun1(v_ename varchar2) return number;
end;
create package body pack1 is
procedure pro1(v_ename varchar2,v_new_sal number) is
begin
update emp set sal=v_new_sal where ename=v_ename;
end;
function fun1(v_ename varchar2) return number is
v_annual_sal number;
begin
select (sal+nvl(comm,0))*12 into v_annual_sal from emp where ename=v_ename;
return v_annual_sal;
end;
end;
---案例:以输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)为例。说明变量的使用,看看如何编写.
create or replace procedure pro2(v_empno in number)is
v_ename emp.ename%type;
v_sal emp.sal%type;
v_tax number;
c_tax_rate constant number :=0.03;
begin
select ename,sal into v_ename,v_sal from emp where empno=v_empno;
v_tax:=v_sal*c_tax_rate;
dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal||'所得税:'||v_tax);
end;
--请编写一个过程,该过程可以接收一个用户编号,并显示该用户的名字,薪水,工作岗位(注意:要求用pl/sql记录实现)
create or replace procedure pro3(v_empno number) is
/*type emp_rec_type is record(
v_ename emp.ename%type,
v_sal emp.sal%type,
v_job emp.job%type
);
emp_record emp_rec_type;*/
emp_row emp%rowtype;
begin
select * into emp_row from emp where empno=v_empno;
dbms_output.put_line('名字:'||