Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
2022-12-20 | 15 |
5.00
из
|
Заказать работу |
|
|
К элементам из спецификации пакета можно обращаться из внешних процедур так:
имя_пакета. имя_элемента
Например:
DBMS_OUTPUT. PUT_LINE(‘This is a parameter data’);
time_package. resettimestamp;
Глобальные) данные пакета
Данные пакета – это данные, объявленные в спецификации или теле вне тел подпрограмм. Область их доступности ограничивается сеансом, то есть они являются глобальными данными для сеанса связи с БД. При этом для данных пакета полезно учитывать следующее:
- на них не распространяется действие COMMIT и ROLLBACK
- курсор, открытый где-нибудь в пакете остается в состоянии OPEN, пока не будет закрыт явно или пока не завершится сеанс
- хорошей практикой считается прятать описания структур данных в тело пакета, предоставляя для пользователей пакета процедуры типа Set и Get для обращения с данными
Взаимные вызовы и повторения имен
Для подпрограмм в составе пакета
- рекурсивный вызов разрешен и глубина рекурсии не регламентирована
- взаимный вызов разрешен и зацикливание не контролируется
- повторение имен разрешено
Пример повторения в описании системного пакета DBMS_OUTPUT:
PACKAGE DBMS_OUTPUT
IS
PROCEDURE PUT_LINE (a VARCHAR2);
PROCEDURE PUT_LINE (a NUMBER);
PROCEDURE PUT_LINE (a DATE); -- в последних версиях отсутствует
END;
Здесь решение о том, к какой из трех процедур PUT_LINE поставить обращение, компилятор принимает на основе анализа типа параметра.
14.5. Прагма SERIALLY_REUSABLE
Если переменные пакета не используются для передачи подпрограммами значений друг другу, а употребляются только в процессе выполнения подпрограмм, полезно в описании пакета указать PRAGMA SERIALLY_REUSABLE. В этом случае после каждого завершения подпрограммы на PL/SQL будут закрываться курсоры и освобождаться память (курсоров и других переменных), а рабочие области данных будут размещаться не в UGA, а в SGA СУБД. В противном случае общая память, требуемая для работы пакета, будет расти линейно с ростом пользователей, одновременно обращающихся к подпрограммам или данным пакета.
|
Пример использования SERIALLY_REUSABLE:
CREATE OR REPLACE PACKAGE mypackage IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE abc;
END mypackage;
CREATE OR REPLACE PACKAGE BODY mypackage IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE abc IS
…
END mypackage;
Инициализация пакета
При первом обращении к какому-либо элементу пакета он весь целиком помещается в SGA экземпляра СУБД, с которым работает пользователь. С этого момента весь код пакета становится доступным для всех пользователей с правом EXECUTE на пакет.
Если в пакета объявлены данные, они помещаются в область UGA сеанса, которая физически может размещаться и в SGA и в PGA. После этого, если объявлен, выполняется код инициализации пакета.
В следующем примере показана техника, позволяющая запоминать в БД данные в закодированном виде, препятствующем их прочтение даже обладателю привилегии SELECT ANY TABLE (например, пользователю SYS):
CREATE OR REPLACE PACKAGE crypting_package IS
FUNCTION encoded (str VARCHAR2) RETURN VARCHAR2;
FUNCTION encoded (num NUMBER) RETURN NUMBER;
FUNCTION decoded (str VARCHAR2) RETURN VARCHAR2;
FUNCTION decoded (num NUMBER) RETURN NUMBER;
END crypting_package;
/
CREATE OR REPLACE PACKAGE BODY crypting_package IS
keyvalue CHAR(8) DEFAULT 'xxxxxxxx';
FUNCTION encoded (str VARCHAR2) RETURN VARCHAR2 IS BEGIN … END;
FUNCTION encoded (num NUMBER) RETURN NUMBER IS BEGIN … END;
FUNCTION decoded (str VARCHAR2) RETURN VARCHAR2 IS BEGIN … END;
FUNCTION decoded (num NUMBER) RETURN NUMBER IS BEGIN … END;
-- раздел инициализации:
BEGIN
…
keyvalue:= …;
…
EXCEPTION...
END crypting_package;
/
В основу такого пакета можно положить пакет DBMS_OBFUSCATION_TOOLKIT или DBMS_CRYPTO, а значение ключа вводить в течение сеанса единожды на основании данных из разных источников, например с диска, самой БД, из сети или из клиентской программы.
|
Примеры использования пакета в прикладной программе:
INSERT INTO some_table (a, b) VALUES ('open text', crypting_package. encoded('encrypted text'));
SELECT crypting_package. decoded(b) FROM some_table;
Дальнейшим усовершенствованием может стать создание выводимой таблицы и триггерных процедур типа INSTEAD OF для нее, например:
CREATE VIEW view_of_some_table AS
SELECT a, crypting_package. decoded(b) b FROM some_table;
|
|
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!