二十三、Oracle学习笔记:综合案例

这篇博客详细介绍了Oracle数据库中PL/SQL的实战应用,包括创建和使用函数、包、过程等。内容涵盖查看雇员工资、用户年薪计算、工资更新、个人所得税计算、雇员信息查询、部门员工信息展示、异常处理等多个综合案例,旨在提升读者在Oracle数据库编程方面的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--查看所有雇员的工资
--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('名字:'||
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值