oracle教程32 包(子程序重载)

灰太狼 2022-05-27 06:59 347阅读 0赞

70

直接上代码吧

  1. --根据员工号或员工姓名获取员工的信息
  2. --根据员工号或员工姓名删除员工的信息
  3. --创建包规范
  4. CREATE OR REPLACE PACKAGE overload_pkg
  5. IS
  6. FUNCTION get_info(eno NUMBER) RETURN emp%ROWTYPE;
  7. FUNCTION get_info(name VARCHAR2) RETURN emp%ROWTYPE;
  8. PROCEDURE del_emp(eno NUMBER);
  9. PROCEDURE del_emp(name VARCHAR2);
  10. END;
  11. --创建包体
  12. CREATE OR REPLACE PACKAGE BODY overload_pkg
  13. IS
  14. FUNCTION get_info(eno NUMBER) RETURN emp%ROWTYPE
  15. IS
  16. emp_record emp%ROWTYPE;
  17. BEGIN
  18. SELECT * INTO emp_record FROM emp WHERE empno = eno;
  19. RETURN emp_record;
  20. EXCEPTION
  21. WHEN NO_DATA_FOUND THEN
  22. RAISE_APPLICATION_ERROR(-20020,'不存在此员工!');
  23. END;
  24. FUNCTION get_info(name VARCHAR2) RETURN emp%ROWTYPE
  25. IS
  26. emp_record emp%ROWTYPE;
  27. BEGIN
  28. SELECT * INTO emp_record FROM emp WHERE ename = name;
  29. RETURN emp_record;
  30. EXCEPTION
  31. WHEN NO_DATA_FOUND THEN
  32. RAISE_APPLICATION_ERROR(-20020,'不存在此员工!');
  33. END;
  34. PROCEDURE del_emp(eno NUMBER)
  35. IS
  36. BEGIN
  37. DELETE FROM emp WHERE empno = eno;
  38. IF SQL%NOTFOUND THEN
  39. RAISE_APPLICATION_ERROR(-20020,'不存在此员工');
  40. END IF;
  41. END;
  42. PROCEDURE del_emp(name VARCHAR2)
  43. IS
  44. BEGIN
  45. DELETE FROM emp WHERE ename = name;
  46. IF SQL%NOTFOUND THEN
  47. RAISE_APPLICATION_ERROR(-20020,'不存在此员工');
  48. END IF;
  49. END;
  50. END;

调用:

  1. --调用
  2. --根据员工号查询员工信息
  3. DECLARE
  4. emp_record emp%rowtype;
  5. e_no_emp EXCEPTION;
  6. PRAGMA EXCEPTION_INIT(e_no_emp,-20020);
  7. BEGIN
  8. emp_record:= overload_pkg.get_info(&no);
  9. DBMS_OUTPUT.PUT_LINE('员工号:'||emp_record.empno||'姓名:'||emp_record.ename||'工资:'||emp_record.sal);
  10. EXCEPTION
  11. WHEN e_no_emp THEN
  12. DBMS_OUTPUT.put_line(SQLERRM);
  13. END;
  14. --根据员工姓名查询员工信息
  15. DECLARE
  16. emp_record emp%rowtype;
  17. e_no_emp EXCEPTION;
  18. PRAGMA EXCEPTION_INIT(e_no_emp,-20020);
  19. BEGIN
  20. emp_record:= overload_pkg.get_info('&name');
  21. DBMS_OUTPUT.PUT_LINE('员工号:'||emp_record.empno||'姓名:'||emp_record.ename||'工资:'||emp_record.sal);
  22. EXCEPTION
  23. WHEN e_no_emp THEN
  24. DBMS_OUTPUT.put_line(SQLERRM);
  25. END;
  26. --根据员工号删除员工信息
  27. DECLARE
  28. e_no_emp EXCEPTION;
  29. PRAGMA EXCEPTION_INIT(e_no_emp, -20020);
  30. BEGIN
  31. overload_pkg.del_emp(&no);
  32. COMMIT;
  33. EXCEPTION
  34. WHEN e_no_emp THEN
  35. DBMS_OUTPUT.put_line(SQLERRM);
  36. ROLLBACK;
  37. END;
  38. --根据员工的姓名删除员工的信息
  39. DECLARE
  40. e_no_emp EXCEPTION;
  41. PRAGMA EXCEPTION_INIT(e_no_emp, -20020);
  42. BEGIN
  43. overload_pkg.del_emp('&name');
  44. COMMIT;
  45. EXCEPTION
  46. WHEN e_no_emp THEN
  47. DBMS_OUTPUT.put_line(SQLERRM);
  48. ROLLBACK;
  49. END;

发表评论

表情:
评论列表 (有 0 条评论,347人围观)

还没有评论,来说两句吧...

相关阅读

    相关 蓝桥杯之包子凑数

    小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大