Oracle PL/SQL 存储过程、函数、包 的范例

数据库   发布日期:2025年05月01日   浏览次数:226

1,写函数和过程,输入三角形三个表的长度。在控制台打印三角形的面积

  1. -- 创建包
  2. create or replace package pac_area is
  3. -- 定义计算三角形面积的过程
  4. procedure pro_area (v_side_first number,v_side_second number,v_side_third number);
  5. -- 定义获取三角形面积的函数
  6. function fun_area return number;
  7. end;
  8. -- 创建包体
  9. create or replace package body pac_area is
  10. -- 把三角形面积定义成包体的成员变量
  11. v_area number(,);
  12. -- 调用包中的过程
  13. procedure pro_area (v_side_first number,v_side_second number,v_side_third number) is
  14. v_p number(,);
  15. begin
  16. v_p:=(v_side_first+v_side_second+v_side_third)/;
  17. v_area:=sqrt(v_p*(v_p-v_side_first)*(v_p-v_side_second)*(v_p-v_side_third));
  18. dbms_output.put_line('三角形的面积为:'||v_area);
  19. end;
  20. --调用包中的函数
  21. function fun_area return number is
  22. begin
  23. return v_area;
  24. end;
  25. end;
  26. -- 通过匿名块调用包中的过程和函数
  27. declare
  28. -- 声明变量 调用函数时使用
  29. v_area number(,);
  30. begin
  31. -- 调用包中的过程
  32. pac_area.pro_area (,v_side_third=>,v_side_second=>);
  33. -- 调用包中的函数
  34. v_area:=pac_area.fun_area ();
  35. dbms_output.put_line('调用函数面积:'||v_area);
  36. end;

2,写一个过程,输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

  1. -- 创建存储过程 输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)
  2. create or replace procedure pro_dept (v_deptno number,v_dname out varchar2,v_total out number,v_avg out number) is
  3. begin
  4. select d.dname,count(e.ename),avg(sal+nvl(comm,)) into v_dname,v_total,v_avg from emp e inner join dept d on e.deptno=d.deptno where e.deptno=v_deptno group by d.dname;
  5. end;
  6. -- 通过匿名块调用存储过程
  7. declare
  8. -- 声明变量 接收出参
  9. v_dname dept.dname%type;
  10. v_total number();
  11. v_avg number(,);
  12. begin
  13. --调用过程
  14. pro_dept (,v_dname,v_total,v_avg);
  15. dbms_output.put_line('部门名称:'||v_dname||',总人数:'||v_total||',平均工资:'||v_avg);
  16. end;

3,编写一个存储过程,输入一个员工编号,输出该员工的员工编号,员工姓名,部门名称

  1. -- 创建存储过程
  2. create or replace procedure pro_emp (v_empno number,v_empno1 out number,v_ename out varchar2,v_dname out varchar2)
  3. is
  4. begin
  5. select e.empno,e.ename,d.dname into v_empno1,v_ename,v_dname from emp e inner join dept d on e.deptno=d.deptno where e.empno=v_empno;
  6. end;
  7. -- 通过匿名块调用存储过程
  8. declare
  9. -- 声明变量,接收出参
  10. v_empno1 emp.empno%type;
  11. v_ename emp.ename%type;
  12. v_dname dept.dname%type;
  13. begin
  14. -- 调用过程
  15. pro_emp (,v_empno1,v_ename,v_dname);
  16. dbms_output.put_line('员工编号:'||v_empno1||',员工姓名:'||v_ename||',部门名称:'||v_dname);
  17. end;

4,编写一个存储过程,输出所有员工及其部门领导的姓名、员工号及部门号

  1. -- 创建存储过程
  2. create or replace procedure pro_emp1
  3. is
  4. -- 声明record类型
  5. type emp_record_type is record(
  6. -- 声明record类型中的变量
  7. v_ename emp.ename%type,
  8. v_mname emp.ename%type,
  9. v_empno emp.empno%type,
  10. v_deptno emp.deptno%type
  11. );
  12. -- 声明table类型
  13. type emp_table_type is table of emp_record_type
  14. -- 指定下标的增长方式为整数 每次增长1
  15. index by binary_integer;
  16. -- 声明table类型的变量
  17. v_emp emp_table_type;
  18. begin
  19. -- 查询所有要打印的数据
  20. select ename,nvl((select e2.ename from emp e2 where e1.mgr=e2.empno),'无'),empno,deptno bulk collect into v_emp from emp e1;
  21. --循环 控制台打印输出结果
  22. for v_i in ..v_emp.count
  23. loop
  24. dbms_output.put_line('员工姓名:'||v_emp(v_i).v_ename||'领导姓名:'||v_emp(v_i).v_mname||'员工编号:'||v_emp(v_i).v_empno||'部门编号:'||v_emp(v_i).v_deptno);
  25. end loop;
  26. end;
  27. -- 通过call调用存储过程
  28. call pro_emp1();

 

以上就是Oracle PL/SQL 存储过程、函数、包 的范例的详细内容,更多关于Oracle PL/SQL 存储过程、函数、包 的范例的资料请关注九品源码其它相关文章!