【问题标题】:How to Create a new Stored Procedure in an Existing Package如何在现有包中创建新的存储过程
【发布时间】:2011-10-16 14:50:02
【问题描述】:

我是使用 PL/SQL 的新手,我正在尝试在现有包中创建一个新的存储过程。我意识到有“CREATE OR REPLACE PACKAGE BODY”,但这是否意味着一旦我添加了我的新 proc,整个 body 将被删除,还是只是将它附加到上面? (我的 proc 名称与任何当前 proc 的名称都不相同)。

【问题讨论】:

    标签: stored-procedures plsql


    【解决方案1】:

    很遗憾,要向现有包添加新的过程或功能,您必须修改原始包并重新提交作为创建或替换。

    目前没有在不修改和重新提交整个包代码的情况下添加或删除包的方法。

    http://forums.oracle.com/forums/thread.jspa?threadID=380898

    【讨论】:

      【解决方案2】:
      CREATE OR REPLACE PACKAGE emp_actions AS  -- spec
      TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL);
      CURSOR desc_salary RETURN EmpRecTyp;
      PROCEDURE hire_employee (
        ename  VARCHAR2,
        job    VARCHAR2,
        mgr    NUMBER,
        sal    NUMBER,
        comm   NUMBER,
        deptno NUMBER);
      PROCEDURE fire_employee (emp_id NUMBER);
      END emp_actions;
      
      CREATE OR REPLACE PACKAGE BODY emp_actions AS  -- body
      CURSOR desc_salary RETURN EmpRecTyp IS
        SELECT empno, sal FROM emp ORDER BY sal DESC;
      PROCEDURE hire_employee (
        ename  VARCHAR2,
        job    VARCHAR2,
        mgr    NUMBER,
        sal    NUMBER,
        comm   NUMBER,
        deptno NUMBER) IS
      BEGIN
        INSERT INTO emp VALUES (empno_seq.NEXTVAL, ename, job,
           mgr, SYSDATE, sal, comm, deptno);
      END hire_employee;
      
      PROCEDURE fire_employee (emp_id NUMBER) IS
      BEGIN
        DELETE FROM emp WHERE empno = emp_id;
      END fire_employee;
      END emp_actions;
      

      我首先定义函数及其类型,然后编写一个或多个要包含在包中的函数的完整主体。事情应该很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 2015-10-11
        相关资源
        最近更新 更多