END IF;
END;
PROCEDURE increase_comm(empno NUMBER, comm_incr NUMBER) IS
curr_comm NUMBER(7,2);
BEGIN
SELECT comm
INTO curr_comm
FROM emp
WHERE emp.empno = increase_comm.empno
IF curr_comm IS NULL
THEN RAISE no_comm;
ELSE
UPDATE emp
SET comm = comm + comm_incr;
END IF;
END;
END emp_mgmt
Тело пакета соответствует спецификации пакета в примере инструкции CREATE PACKAGE, приведённой ранее в главе. Тело пакета определяет публичные объекты программы, объявленные в спецификации пакета:
· функции HIRE и CREATE_DEPT
· процедуры REMOVE_EMP, REMOVE_DEPT, INCREASE_SAL и INCREASE_COMM
Так как эти объекты объявлены в спецификации пакета, они могут быть вызваны программами приложения, процедурами и функциями вне пакета. Например, если вы имеете доступ к пакету, вы можете создать процедуру INCREASE_ALL_COMMS отдельно от пакета EMP_MGMT, который вызывает процедуру INCREASE_COMM.
Так как эти объекты определены в теле пакета, вы можете изменять их определения без без вынуждения Oracle7 к обновлению зависимых объектов схемы. Например, если вы впоследствии измените определение HIRE, Oracle7 не нуждается в перекомпиляции INCREASE_ALL_COMMS до её выполнения.
Тело пакета в этом примере также объявляет личные объекты программы, переменные TOT_EMPS и TOT_DEPTS. Так как эти объекты объявлены в теле пакета, а не в спецификации, они доступны другим объектам схемы, но не доступны вне пакета. Напимер, вы не можете разработать приложение, которое явно изменяет значение переменной TOT_DEPTS. Однако, так как функция CREATE_DEPT является частью пакета, CREATE_DEPT может изменять значение TOT_DEPTS.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.