如何在现有包中创建新的存储过程

时间:2011-07-30 17:20:14

标签: stored-procedures plsql

我是使用PL / SQL的新手,我正在尝试在现有包中创建一个新的存储过程。我意识到有“创建或替换包装身体”,但这是否意味着一旦我添加新的proc,整个身体将被删除,或者它只是附加它? (我的proc名称与当前任何proc的名称不同。)

谢谢!

2 个答案:

答案 0 :(得分:13)

不幸的是,要向现有包添加新的procudure或函数,您必须修改原始包并重新提交为创建或替换。

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

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

答案 1 :(得分:1)

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;

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