Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Топ:
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2022-12-20 | 19 |
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!