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

 

Создание пакетов.

Для сождания пакета вам нужно произвести два различных шага:

1.  Создать спецификацию пакета с помощью команды CREATE PACKAGE. Вы можете объявлять объекты программы в спецификации пакета. Такие объекты называются публичными объектами. На публичные объекты можно ссылаться извне пакета так же, как могут ссылаться другие объекты пакета.

2.  Создайте тело пакета коммандой CREATE PACKAGE BODY. Вы можете объявлять объекты программы в теле пакета:

·  Вы должны определить публичные объекты, объявленные в спецификации пакета.

·  Вы также можете объявить и определить дополнительные объекты пакета. Такие объекты называются личными. Так как личные объекты объявляются в теле пакета, а не в спецификации пакета, на них могут ссылаться только объекты пакета. На них нельзя ссылаться извне пакета.

 

Разделение спецификации и тела.

 

Oracle7 хранит спецификацию и тело пакета отдельно в базе данных. Другие обеъкты схемы, которые вызывают или ссылаются на  публичные объекты программы, зависят только от спецификации пакета, а не от тела. Это разделение позволяет вам изменять определение объектов программы из тела пакета, без принуждения Oracle7 обновлять другие объекты схемы, которые вызывают или ссылаются на этот объект программы. Oracle7 только обновляет зависимые объекты схемы, если вы измените объявление объекта программы в спецификации пакета.

 

Пример.

Эти инструкции SQL создают спецификацию пакета EMP_MGMT:

CREATE PACKAGE emp_mgmt AS

          FUNCTION hire(ename VARCHAR2, job VARCHAR2, mgr NUMBER,

                                          sal NUMBER, comm NUMBER, deptno NUMBER)

                          RETURN NUMBER;

          FUNCTION create_dept(dname VARCHAR2, loc VARCHAR2)

                          RETURN NUMBER;

          PROCEDURE remove_emp(empno NUMBER);

          PROCEDURE remove_dept(deptno NUMBER);

          PROCEDURE increase_sal(empno NUMBER, sal_incr NUMBER);

          PROCEDURE increase_comm(empno NUMBER, comm_incr NUMBER);