【发布时间】:2011-10-16 14:50:02
【问题描述】:
我是使用 PL/SQL 的新手,我正在尝试在现有包中创建一个新的存储过程。我意识到有“CREATE OR REPLACE PACKAGE BODY”,但这是否意味着一旦我添加了我的新 proc,整个 body 将被删除,还是只是将它附加到上面? (我的 proc 名称与任何当前 proc 的名称都不相同)。
【问题讨论】:
我是使用 PL/SQL 的新手,我正在尝试在现有包中创建一个新的存储过程。我意识到有“CREATE OR REPLACE PACKAGE BODY”,但这是否意味着一旦我添加了我的新 proc,整个 body 将被删除,还是只是将它附加到上面? (我的 proc 名称与任何当前 proc 的名称都不相同)。
【问题讨论】:
很遗憾,要向现有包添加新的过程或功能,您必须修改原始包并重新提交作为创建或替换。
目前没有在不修改和重新提交整个包代码的情况下添加或删除包的方法。
【讨论】:
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;
我首先定义函数及其类型,然后编写一个或多个要包含在包中的函数的完整主体。事情应该很好。
【讨论】: