Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2022-12-20 | 16 |
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!