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

We use cookies. Read the Privacy and Cookie Policy

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

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]);