开发者社区> 问答> 正文

建立包体 CREATE PACKAGE BODY

已解决

展开
收起
2017-12-15 18:09:06 670 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    --
    --  Package body for the 'emp_admin' package.
    --
    CREATE OR REPLACE PACKAGE BODY emp_admin
    IS
      --
      --  Function that queries the 'dept' table based on the department
      --  number and returns the corresponding department name.
      --
      FUNCTION get_dept_name (
          p_deptno        IN NUMBER
      ) RETURN VARCHAR2
      IS
          v_dname         VARCHAR2(14);
      BEGIN
          SELECT dname INTO v_dname FROM dept WHERE deptno = p_deptno;
          RETURN v_dname;
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
              DBMS_OUTPUT.PUT_LINE('Invalid department number ' || p_deptno);
              RETURN '';
      END;
      --
      --  Function that updates an employee's salary based on the
      --  employee number and salary increment/decrement passed
      --  as IN parameters.  Upon successful completion the function
      --  returns the new updated salary.
      --
      FUNCTION update_emp_sal (
          p_empno         IN NUMBER,
          p_raise         IN NUMBER
      ) RETURN NUMBER
      IS
          v_sal           NUMBER := 0;
      BEGIN
          SELECT sal INTO v_sal FROM emp WHERE empno = p_empno;
          v_sal := v_sal + p_raise;
          UPDATE emp SET sal = v_sal WHERE empno = p_empno;
          RETURN v_sal;
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
              DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno || ' not found');
              RETURN -1;
          WHEN OTHERS THEN
              DBMS_OUTPUT.PUT_LINE('The following is SQLERRM:');
              DBMS_OUTPUT.PUT_LINE(SQLERRM);
              DBMS_OUTPUT.PUT_LINE('The following is SQLCODE:');
              DBMS_OUTPUT.PUT_LINE(SQLCODE);
              RETURN -1;
      END;
      --
      --  Procedure that inserts a new employee record into the 'emp' table.
      --
      PROCEDURE hire_emp (
          p_empno         NUMBER,
          p_ename         VARCHAR2,
          p_job           VARCHAR2,
          p_sal           NUMBER,
          p_hiredate      DATE,
          p_comm          NUMBER,
          p_mgr           NUMBER,
          p_deptno        NUMBER
      )
      AS
      BEGIN
          INSERT INTO emp(empno, ename, job, sal, hiredate, comm, mgr, deptno)
              VALUES(p_empno, p_ename, p_job, p_sal,
                     p_hiredate, p_comm, p_mgr, p_deptno);
      END;
      --
      --  Procedure that deletes an employee record from the 'emp' table based
      --  on the employee number.
      --
      PROCEDURE fire_emp (
          p_empno         NUMBER
      )
      AS
      BEGIN
          DELETE FROM emp WHERE empno = p_empno;
      END;
    END;
    2017-12-16 10:15:24
    赞同 展开评论 打赏
问答分类:
问答地址:
相关问答
702
1
0
993
1
0
357
1
0
687
1
0
19449
15
0
261
1
0
559
1
0
469
1
0
886
1
0
482
1
0
问答排行榜
最热
最新
推荐问答

相关文章

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载