Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

Например, следующий оператор определяет обычный символьный столбец и столбец в виде одноразмерного символьного массива, содержащего восемь элементов:

CREATE TABLE ATABLE (ID BIGINT,

ARR_CHAR(14)[8] CHARACTER SET OCTETS);

/* хранит 1 строку по 8 элементов */

Многомерные массивы

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

тремя и четырьмя размерностями:

CREATE TABLE BTABLE (

/* хранит 4 строки по 5 элементов = 20 элементов */

ARR_INT2 INTEGER[4,5],

/* 6 уровней, по 4 строки по 5 элементов = 120 элементов */

ARR_INT3 INTEGER [4,5,6],

/* 7 ярусов, по 6 уровней в 4 строки по 5 элементов = 840 элементов */

ARR_INT6 INTEGER[4,5,6,7] ) ;

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

Задание диапазона значений индексов для размерностей

Размерности массивов в Firebird задаются в виде верхней и нижней границ, называемых списком индексов. По умолчанию размерности основаны на 1 - первый элемент массива из n элементов имеет индекс 1, второй элемент имеет индекс 2, а последний элемент индекс n. Например, следующий оператор создает таблицу со столбцом, который является массивом четырех целых:

CREATE TABLE TABLEC (ARR_INT INTEGER[4]);

Индексы этого массива 1, 2, 3 и 4.

Пользовательские (явные) границы индексов

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

Требуются нижняя и верхняя граница размерности при определении пользовательских границ. Используется следующий синтаксис:

[ нижняя:верхняя]

Следующий пример создает таблицу с одноразмерным, основанным на нуле столбцом массива:

CREATE TABLE TABLED

(ARR_INT INTEGER[0:3]);

/* индексы 0, 1, 2, и 3. */

Каждое задание границ размерности отделяется от следующего запятой. Например, следующий оператор создает таблицу со столбцом массива размерности два, где обе размерности основаны на нуле:

CREATE TABLE TABLEE

(ARR_INT INTEGER[0:3, 0:3]);

Хранение столбцов массивов

Как и другие типы данных, реализованные как BLOB, Firebird хранит идентификатор

массива в столбце таблицы базы данных, который ссылается на страницу, содержащую фактические данные.

Обновления

Как и в случае других типов BLOB, сервер Firebird не может последовательно просматривать индивидуальные элементы при условном обновлении. При этом в одиночном операторе DML возможно изолировать один элемент или набор последовательных элементов, называемый фрагментом, и передавать этот фрагмент для обновления.

Добавления

Оператор INSERT не может оперировать с фрагментами. Когда строка добавляется в таблицу, содержащую столбцы массивов, необходимо конструировать и заполнять массив целиком до передачи его INSERT.

Доступ к данным массива

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

Дескриптор массива

API предоставляет структуру дескриптора массива для передачи серверу массива или фрагмента массива для чтения и записи в базу данных. Эта структура для программистов представлена в файле ibase.h (добавлены комментарии):

typedef struct {

short array_bound_lower;

/* нижняя граница массива или фрагмента */

short array_bound_upper;

/* верхняя граница массива или фрагмента */

} | SC_ARRAY_BOUND;

typedef struct {

unsigned char array_desc_dtype;

/* тип данных элементов */

char array_desc_scale;

/* масштаб для числовых типов */

unsigned short array_desc_length;

/* длина элемента массива в байтах */

char array_desc_field_name[32] ;

/* идентификатор столбца */

char array_desc_relation_name[32];

/* идентификатор таблицы */

short array_desc_dimensions;

/* количество размерностей */

short array_desc_flags;

/* 0=порядок по строкам, 1=порядок по столбцам */

ISC_ARRAY_BOUND array_desc_bounds[16];

/* верхняя и нижняя границы для размерности до 16 */

} ISC_ARRAY_DE SC;

Документ по InterBase 6 "API Guide" (Руководство no API), опубликованный Borland, содержит детальные инструкции по манипулированию массивами с помощью структур API.

Ограничения доступа динамического SQL

Следующий пример является простой демонстрацией того, как приложение DSQL может получить ограниченный доступ к фрагменту массива через хранимую процедуру:

Поделиться:
Популярные книги

Измена. Тайный наследник

Лаврова Алиса
1. Тайный наследник
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Тайный наследник

Инквизитор Тьмы

Шмаков Алексей Семенович
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы

Наследник

Майерс Александр
3. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Наследник

Ротмистр Гордеев 3

Дашко Дмитрий
3. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 3

(Не)нужная жена дракона

Углицкая Алина
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
(Не)нужная жена дракона

Идеальный мир для Лекаря 28

Сапфир Олег
28. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 28

Сыночек в награду. Подари мне любовь

Лесневская Вероника
1. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сыночек в награду. Подари мне любовь

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Искатель 1

Шиленко Сергей
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 1

Сердце Дракона. Том 10

Клеванский Кирилл Сергеевич
10. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.14
рейтинг книги
Сердце Дракона. Том 10

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Выстрел на Большой Морской

Свечин Николай
4. Сыщик Его Величества
Детективы:
исторические детективы
полицейские детективы
8.64
рейтинг книги
Выстрел на Большой Морской

Кодекс Крови. Книга VII

Борзых М.
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VII