Теория для лабораторной работы №4 - "PL/SQL – процедурное расширение языка SQL", страница 8

                            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.