Массивы с переменной длиной элементов

С переменной длиной элементов массива могут быть только строковые и байтовые массивы.

Объявление этих массивов возможно двумя способами: в стиле СУБД ЛИНТЕР или в стиле СУБД Ingres. Смешение стилей в одном исходном тексте модуля основного языка не допускается.

1 способ (в стиле СУБД ЛИНТЕР)

<​массив с переменной длиной элементов​>::=
{VARCHAR | VARBIT}
<​имя​> <​размер1​> [<​размер2​>] <​длина элемента​>

2 способ (в стиле СУБД Ingres)

{[VARCHAR]|VARBIT} struct
{
short length;
char text<​длина элемента​>;
} <​имя​><​размер1​> [<​размер2​>];

<​имя​>::=переменная основного языка
<​размер1​>::='['<​значение​>']'
<​размер2​>::='['<​значение​>']'
<​длина элемента​>::='['<​значение​>']'
<​значение​>::= целое положительное число
Описание
  1. <​Длина элемента​> задает максимальный размер элемента массива.

  2. VARCHAR, VARBIT – тип данных элемента массива. Объявление этих массивов возможно двумя способами: в стиле СУБД ЛИНТЕР или в стиле СУБД Ingres. Смешение стилей в одном исходном тексте модуля основного языка не допускается.

  3. В случае объявления в стиле СУБД ЛИНТЕР массивы транслируются в виде:

    • VARCHAR[n][[m]]:

      struct
       { short len;
        char arr[m];
       } <​имя​>[n];
    • VARBIT[n][[m]]:

      struct
       { short len;
       unsigned char arr[m];
       } <​имя​>[n];
  4. В случае объявления в стиле СУБД Ingres массивы транслируются в виде:

    • VARCHAR[n][[m]]:

      struct
       { short length;
       char text[m];
       }<​имя​>[n]
    • VARBIT[n][[m]]:

      struct
       { short length;
       unsigned char text[m];
       }<​имя​>[n]