Контекст на сесията в Oracle
Във всяка сесия на работа със СУБД можете да използвате така наречените контексти, които официално представляват именован набор от двойки "параметър/стойност". Контекстите на сесията имат редица интересни свойства, които значително подобряват "присъщите" възможности на Oracle за изграждане на приложения. Статията разглежда възможностите за проектиране на локален и глобален контекст на сесията и някои от техните свойства.
Контекст на сесията за създаване
За да създадете контекст сами, използвайте специалната команда CREATE CONTEXT. Той може да бъде издаден (т.е. създаден контекст) от сесия, която има правото СЪЗДАВАНЕ НА ВСЯКИ КОНТЕКСТ. Думата ANY в името на органа (привилегия) показва, че контекстът е обект извън схемата в базата данни на Oracle, като роля и различен, например, от таблица.
Всеки контекст изисква да посочите специален "доверен" софтуерен модул: процедура, функция или пакет. Именно от тялото на тази програмна единица Oracle ще позволи да бъде извикана процедурата DBMS_SESSION.SET_CONTEXT. Такова неочаквано решение беше взето в името на сигурността, тъй като достъпът до съхранените програмни единици се регулира от готов механизъм за привилегии.
Пример за създаване на контекст
Да предположим, че процедурата SET_MYCONTEXT_VALUE трябва да бъде довереното програмно звено:
Имайте предвид, че процедурата не трябва да съществува, когато се създава контекстът. Но в крайна сметка все пак ще трябва да бъде създаден:
По-горе празният ред е подчертан в сиво.
Стойностите на контекстните атрибути не живеят по-дълго от ограниченията на сесията и са защитени от достъп от други сесии. По време на сесия стойностите на променливите на пакета могат да изчезнат ("изхвърлят" пакета, въпреки че потребителите не често прибягват до него), както и стойностите на атрибутите на контекста (използвайки пакета DBMS_SESSION). По този начин атрибутите са подобни на променливите на пакета. Но има и разлики:
- в пакета, наборът от променливи е фиксиран, а наборът от атрибути на контекста е произволен
- пакетните променливи могат да се променят по структура, а стойностите на атрибутите на контекста са просто редове текст
- атрибутите на контекста могат да бъдат зададени преди сесия и да бъдат предоставени в друга сесия.
Ето още един пример, използващ нашия контекст:
Разлика в технологията: Използване на пакет за доверие
Ако попитате структурата на справочната таблица на наличните контексти, можете да видите, че полето за доверието на програмата е наречено PACKAGE:
Това не е случайно: на практика често е по-технологично напреднало да се задава контекстът, като се използва пакет за доверие, а не отделна процедура или функция. В крайна сметка пакетът може да включва и други софтуерни елементи, които симулират логиката на предметната област.