Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ud.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
821.25 Кб
Скачать

6.6 Инструкции sql

Определение переменных

DECLARE VARIABLE var <тип_данных>;

[DECLARE VARIABLE var <datatype>; ...]

<тип_данных> может быть числового, строкового типа или дата.

Используются переменный обычным образом. Перед именем переменной ставится «:»

FOR <select_выражение>

DO <инструкция>

Повторение инструкции или блока, который следует за DO, для каждой допустимой строки возращенной <select_выражение>.

  • <select_выражение>: нормальный оператор SELECT, за исключением, INTO предложение требуется и должно быть последним.

  • <инструкция>: или одиночная инструкция (оператор) на языке процедур и триггеров или блок инструкций заключенный в BEGIN и END.

IF (<условие>)

THEN <инструкция> [ELSE <инструкция>]

Проверяет <условие>, и если оно TRUE, выполняет инструкцию или блок, следующий за THEN; иначе, выполняет инструкцию или блок следующий за ELSE, если он существует.

WHILE (<условие>)

DO <инструкция>

Пока <условие> TRUE, выполняется <инструкция> Первое <условие> проверяется и если оно TRUE, то выполняется <инструкция>.

Пример использования инструкций:

Следующая процедура возвращает количество сотрудников, работающих в должности переданной строковым параметром (но не ее идентификатором), например «Доцент» и общее количество денег выплачиваемых им в качестве зарплаты.

SET TERM ^ ;

ALTER PROCEDURE num_sotr(

dolg CHAR(10)

)

RETURNS(

num integer,

sum_money integer

)

AS

DECLARE VARIABLE id_d INTEGER;

BEGIN

num=0;

FOR SELECT id_d

FROM dolgnost

WHERE dolg=:dolg

INTO :id_d

DO

BEGIN

SELECT COUNT(*)

FROM a

WHERE

a.id_d=:id_d

INTO num;

END

sum_money=0;

IF (num>0) THEN

BEGIN

sum_money = sum_money * num;

END

END ^

SET TERM ; ^

7. Физическая организация и работа субд

7.1 Хранение данных

Обобщенная структура SQL-сервера:

Ошибка! Ошибка связи.

Реляционные СУБД обладают рядом особенностей, влияющих на организацию внешней памяти. К наиболее важным особенностям можно отнести следующие:

  • Наличие двух уровней системы: уровня непосредственного управления данными во внешней памяти (а также обычно управления буферами оперативной памяти, управления транзакциями и журнализацией изменений БД) и языкового уровня (например, уровня, реализующего язык SQL). При такой организации подсистема нижнего уровня должна поддерживать во внешней памяти набор базовых структур, конкретная интерпретация которых входит в число функций подсистемы верхнего уровня.

  • Поддержание отношений-каталогов. Информация, связанная с именованием объектов базы данных и их конкретными свойствами (например, структура ключа индекса), поддерживается подсистемой языкового уровня. С точки зрения структур внешней памяти отношение-каталог ничем не отличается от обычного отношения базы данных.

  • Регулярность структур данных. Поскольку основным объектом реляционной модели данных является плоская таблица, главный набор объектов внешней памяти может иметь очень простую регулярную структуру.

  • При этом необходимо обеспечить возможность эффективного выполнения операторов языкового уровня как над одним отношением (простые селекция и проекция), так и над несколькими отношениями (наиболее распространено и трудоемко соединение нескольких отношений). Для этого во внешней памяти должны поддерживаться дополнительные "управляющие" структуры - индексы.

  • Наконец, для выполнения требования надежного хранения баз данных необходимо поддерживать избыточность хранения данных, что обычно реализуется в виде журнала изменений базы данных.

Основная единица хранения данных на уровне файла БД – страница (page). В схеме хранения страница представляет собой блок фиксированной длины, обрабатываемой при дисковых операциях. вв/выв как единое целое. Т.о., если пользователь затребует 10 строку, то с диска будет считана вся страница ее содержащую. В InterBase размер страницы фиксирован и может составлять 1024, 2048, 4096 и 8192 байт.

В общем случае структура страницы следующая:

Страница является минимальным блоком, в который сервер хранит данные. Для более эффективного управления страницами сервер использует группы страниц – экстенты (extents). Экстент в свою очередь является базовым блоком хранения данных разнотипных таблиц и индексов.

При добавлении/удалении/изменении данных просматриваются экстенты для тех таблиц, для которых эти операции затребованы. В случае, если данные добавляются, то просматриваются страницы соответствующего экстента. Если ни одна из страниц не имеет достаточного места для вставки строк, то для этого выделяется новый экстент. При удалении страницы (и экстенты) не удаляются. Для того, чтобы их физически удалить из файла БД и тем самым уменьшить размер БД необходимо ее упаковывать. Это есть отдельная операция, выполняемая над БД. Для этого в большинстве случаев достаточно сделать резервную копию БД, разрегистрировать ее, а затем восстановить из резервной копии.

БД в общем случае в своем составе имеет файлы следующих типов:

Primary – основной файл. Файл этого типа содержит системную информацию о самой БД и ее объектах и их параметрах.

Secondary – вторичный файл. Файлы этого типа не содержат системную информацию и используются только для хранения данных.

Transaction Log – журнал транзакций. Файлы этого типа используются для хранения информации о транзакциях, выполненных в БД.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]