数据库包的使用

CREATE OR REPLACE PACKAGE demo_pack                 --创建包定义
   IS
        DeptRec dept%ROWTYPE;
        FUNCTION add_dept(                      --声明一个方法
         dept_no NUMBER, dept_name VARCHAR2,
           location VARCHAR2)
          RETURN NUMBER;
       FUNCTION remove_dept(dept_no NUMBER)         --声明另个方法
         RETURN NUMBER;
       PROCEDURE query_dept(dept_no IN NUMBER);
 END demo_pack; 

CREATE OR REPLACE PACKAGE BODY demo_pack           --创建包体
 IS 
      FUNCTION add_dept                                         --实现包定义的方法
        (dept_no NUMBER, dept_name VARCHAR2, location VARCHAR2)
         RETURN NUMBER
        IS 
         empno_remaining EXCEPTION;
             PRAGMA EXCEPTION_INIT(empno_remaining, -1);
BEGIN
    INSERT INTO dept VALUES(dept_no, dept_name, location);
   IF SQL%FOUND THEN
      RETURN 1;
    END IF;
  EXCEPTION
         WHEN empno_remaining THEN 
        RETURN 0;
       WHEN OTHERS THEN
        RETURN -1;
 END add_dept; 
FUNCTION remove_dept(dept_no NUMBER)                     --实现包定义的另一方法
     RETURN NUMBER
      IS 
      BEGIN
       DELETE FROM dept WHERE deptno=dept_no;
           IF SQL%FOUND THEN
          RETURN 1;
        ELSE
         RETURN 0;
          END IF;
      EXCEPTION
        WHEN OTHERS THEN
         RETURN -1;
     END remove_dept; 
     PROCEDURE query_dept
     (dept_no IN NUMBER)
  IS
 BEGIN
      SELECT * INTO DeptRec FROM dept WHERE deptno=dept_no;
  EXCEPTION
        WHEN NO_DATA_FOUND THEN  
          DBMS_OUTPUT.PUT_LINE('数据库中没有编码为'||dept_no||'的部门');
         WHEN TOO_MANY_ROWS THEN
          DBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');
        WHEN OTHERS THEN
         DBMS_OUTPUT.PUT_LINE(SQLCODE||'----'||SQLERRM);
  END query_dept;
END demo_pack; 

DECLARE                                                            --调用包
         Var NUMBER;
BEGIN
   Var := demo_pack.add_dept(80,'阿晨', '西安');
   IF var =-1 THEN
        DBMS_OUTPUT.PUT_LINE(SQLCODE||'----'||SQLERRM);
    ELSIF var =0 THEN
        DBMS_OUTPUT.PUT_LINE('该部门记录已经存在!');
    ELSE
       DBMS_OUTPUT.PUT_LINE('添加记录成功!');
       Demo_pack.query_dept(80);
        DBMS_OUTPUT.PUT_LINE(demo_pack.DeptRec.deptno||'---'||
       demo_pack.DeptRec.dname||'---'||demo_pack.DeptRec.loc);
        var := demo_pack.remove_dept(80);
        IF var =-1 THEN
          DBMS_OUTPUT.PUT_LINE(SQLCODE||'----'||SQLERRM);
        ELSIF var=0 THEN
         DBMS_OUTPUT.PUT_LINE('该部门记录不存在!');
       ELSE
         DBMS_OUTPUT.PUT_LINE('删除记录成功!');
       END IF;
    END IF;
END; 

  

posted @ 2017-08-01 19:43  王。雄  阅读(319)  评论(0编辑  收藏  举报