- •Конспект лекций не официальный, возможны ошибки! Еремеев н.Б.
- •Распределенная база данных
- •Пример транзакции
- •Пример рбд
- •Прямые и косвенные соединения
- •Объекты: схемы и именования в рбд
- •Удаленные и распределенные предложения
- •Прозрачность в рбд. Прозрачность местоположения.
- •Прозрачность в системе рбд
- •Архитектура рбд Oracle
- •Прозрачность транзакций.
- •Прозрачность дублирования.
- •Разрешение имен в рбд
- •Снимки.
- •Двухфазный commit.
- •Фаза подготовки.
- •Фаза подтверждения
- •Создание точки подтверждения.
- •Проектирование распределенных приложений.
- •Уникальность имен.
- •Последовательности в распределенных транзакциях.
- •Обработка ошибок в удаленных процедурах.
- •Разрешение проблем распределенных транзакций
- •Снимки. Управление ими.
- •Спецификация определяющего запроса снимка (as ...).
- •Порядок создания снимков и их журналов:
- •Альтернативы снимкам.
- •Дублирование таблиц с помощью триггеров:
- •Создание триггера
- •Управление снимками
- •Создание снимков
- •Установление параметров памяти для снимков.
- •Конфигурирование автоматических обновлений
- •Ручное обновление снимков.
- •Связь между декларативными ограничениями и снимками.
- •Управление журналами снимков.
- •Внутренняя реализация журнала снимка.
- •Удаление журнала снимков.
- •Управление распределенными бд администратором.
- •Принципы простроения глобального имени бд:
- •Безопасность бд.
- •Характеристики и квоты различных табличных пространств.
- •Ресурсные лимиты и профили пользователей.
- •Лицензирование.
- •Привилегии и роли.
- •Защита таблиц.
- •Защита обзоров:
- •Усиление защиты таблиц через обзоры:
- •Защита процедур.
- •Табличные пространства и файлы данных Файлы данных
- •Табличное пространство
- •Объекты табличного пространства
- •Блок данных
- •Экстенты
- •Сегменты
- •Копирование и восстановление баз данных
- •Рекомендации по копированию баз данных.
- •Стратегии копирования Стратегии копирования в режиме no archive log
- •Стратегии копирования в режиме archive log
- •Процедуры копирования.
- •Процедура полного копирования базы данных
- •Восстановление
- •Опции предложений Audit и NoAudit.
- •Дополнительные опции по аудиту предложений:
- •Включение аудита
- •Выключение аудита.
- •Контролирование роста и размера аудиторского журнала.
- •Защита аудиторского журнала
- •Аудит с помощью триггеров
- •Поддержка национальных языков.
- •Лингвистическая сортировка.
- •Перекрытие стандартных умолчаний.
- •Форматы чисел и дат.
- •Объекты в Oracle.
- •Атрибуты
- •Сравнение объектов
- •Синтаксис объявления типов
- •Объявление и инициализация объектов
- •Вызов методов
- •Хранение объектов в бд
- •Использование оператора select
- •Вставка объектов
- •Обновление объектов
- •Удаление объектов
Синтаксис объявления типов
CREATE [OR REPLACE] TYPE type_name
[AUTHID {CURRENT USER | DEFINER}]
{IS | AS object (
[{MAP | ORDER} member function_spec, ]
[{MEMBER | STATIC} {subrout_pr_spec | call_spec}]
[, { //--// }] …
);
Фрагмент [AUTHID {CURRENT USER | DEFINER}] определяет, с какими правами будут выполняться методы в определенном нами объекте. Если выбрали DEFINER, то методы, определенные в объекте, будут выполняться с правами автора объекта.
В объявлении объекта сами тела функций отсутствуют.
[ CREATE [OR REPLACE] TYPE BODY {IS | AS}
{ {MAP | ORDER} member function_body,
|{MEMBER | STATIC} {subpr_body | call_spec}; }
[{MEMBER | STATIC} {subpr_body | call_spec}; }] …
END; ]
Пример объекта типа STACK.
Определим спецификацию типа:
CREATE TYPE IntArray AS VARRAY(25) OF Integer;
CREATE TYPE Stack AS object(
max_size Integer,
top Integer, - указатель на вершину стека
position IntAttay, - сам стек
MEMBER PROCEDURE initialize,
MEMBER FUNCTION full RETURN BOOLEAN,
MEMBER FUNCTION empty RETURN BOOLEAN,
MEMBER PROCEDURE push (n IN integer), - входной параметр
MEMBER PROCEDURE pop (n OUT integer) - выходной параметр
);
/
Определим тело объекта:
CREATE TYPE BODY stack AS
MEMBER PROCEDURE initialize IS
BEGIN
top:=0; - можно было написать Self.top
position:=IntArray(NULL);
max_size:=position.LIMIT; - определили содержимое поля max_size,
используя метод LIMIT
position.EXTEND (max_size-1,1); - заполняем элементы со 2-го по 25-й значением
первого элемента
END initialize;
MEMBER FUNCTION full RETURN boolean IS
BEGIN
RETURN(top=max_size); - если указатель на вершину стека=max_size, то
стек полностью заполнен
END full;
MEMBER FUNCTION empty RETURN boolean IS
BEGIN
RETURN(top=0); - если указатель на вершину стека=0, то
стек пустой
END empty;
MEMBER PROCEDURE push (n IN integer) IS
BEGIN
IF NOT full THEN
top:=top+1;
position(top):=n;
ELSE
RAISE_APPLICATION_ERROR(-20102,'stack overflow');
END IF;
END push;
MEMBER PROCEDURE pop (n OUT integer) IS
BEGIN
IF NOT empty THEN
n:=position(top);
top:=top-1;
ELSE
RAISE_APPLICATION_ERROR(-20102,'stack underflow');
END IF;
END pop;
END; - закрыли оператор CREATE
/
Объявление и инициализация объектов
Пример
DECLARE
S:stack; - объявление объект
Begin
S:=stack(10,1); - инициализация объекта
End;
Конструкторы в PL/SQL всегда нужно вызывать явно. Если конструктор объекта не вызывался, то тогда необходимо помнить о том, что атрибуты имеют значение null. Более того, сам объект имеет значение null. Если попытаться присвоить значения полям без вызова объекта, то будет вызвана исключительная ситуация.
Объекты можно:
хранить в БД;
допускаются операции SELECT, INSERT, UPDATE.
Пример:
CREATE TABLE nr (rn Rational, …);
INSERT INTO nr (rn) VALUES (Rational(3,62));
Вызов методов
Пример:
S.initialize; - инициализация стека
IF not s.full THEN …
S.push(r); - заполнение стека
При определении объектов можно использовать уже существующие объекты в качестве атрибутов объектов. Для этого используют специальные ключевые слова REF (указатель на объект) и DEREF (чтобы получить сам объект, а не указатель).
При определении объектов допускается использование предварительного определения объектов. Для этого используется конструкция CREATE TYPE имя_типа_объекта.
