Тема 4. Стандартные функции в СУБД

В xBase существуют специальные команды – функции, к которым относятся команды подсчета записей в активной таблице данных, вычисления среднего значения и суммы по числовым полям активной таблицы данных.

Подсчитанные данные можно занести в переменные – временные переменные памяти (ВПП). Максимально допустимое число ВПП в различных СУБД различно. Имя переменной может содержать любые цифры, знак подчеркивания, буквы (в ранних версиях – только латинские), но не может начинаться с цифры. Длина имени определяется версией конкретной СУБД. Тип ВПП явно не задается, а определяется ее значением. Возможные типы ВПП в xBase соответствуют возможным типам полей в данной СУБД: символьные (C), числовые (N), типа даты (D), логические (L) и т.д. Присвоение переменной некоторого значения осуществляется двумя способами:

STORE < выражение> TO < список_ВПП >

или

<ВПП> = <выражение>

Из ВПП можно организовать массив. Но массив предварительно должен быть описан. Массивы могут быть одномерными и двумерными, для их описания используется служебное слово DIMENSION или DECLARE. Имена массивов и имена ВПП не должны совпадать. Элементы одного и того же массива могут быть разных типов, индексация элементов массива начинается с 1. К элементу двумерного массива возможно обращение как к элементу одномерного массива. При этом индекс такого элемента определяется порядком следования этого элемента в массиве. При описании массива всем его элементам автоматически присваивается логическое значение (.F.).

ВПП могут быть PUBLIC (глобальные), PRIVATE (локальные), REGIONAL (региональные). Все переменные, которые создаются в интерактивном режиме, являются глобальными. Если ВПП создаются в программе, то они являются локальными. Эти переменные после выполнения программы уничтожаются, поэтому они допустимы для работы только в той программе, в которой созданы. Можно явно объявить характер ВПП, используя следующие команды:

PUBLIC <список_ВПП> (для глобальных ВПП)

или

PRIVATE <список_ВПП> (для частных ВПП)

Созданные ВПП можно просмотреть, используя команды:

LIST MEMORY [ TO PRINT ]

или

DISPLAY MEMORY [ TO PRINT ]

Необязательный параметр TO PRINT позволяет выводить информацию о ВПП на печать.

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

STORE <имя_поля> TO <имя_ВПП>

Можно выполнить обратное действие, используя команду замены REPLACE. Формат команды:

REPLACE [<диапазон>] <поле1> WITH <выражение1>

[,<поле2> WITH <выражение2>….] [FOR / WHILE <условие>]

Команда REPLACE для активной таблицы данных выполняет замену данных, находившихся в поле <поле1> на данные, приведенные в выражении <выражение1>, в поле <поле2> - на данные, приведенные в выражении <выражение2> и т.д. Диапазоном по умолчанию является одна текущая запись. В этом случае указатель записи должен быть предварительно установлен на соответствующую запись, так как команда REPLACE не перемещает указатель записи. Использование операторов FOR (WHILE) позволяет выполнять замену данных только в тех записях, для которых выражение FOR <условие> истинно или до тех пор, пока выражение WHILE<условие> истинно.

Созданные в оперативной памяти ВПП можно сохранить в файле, используя команду:

SAVE TO <имя_файла_ВПП>[<список_ВПП>/ALL [LIKE/EXCEPT<шаблон>]]

При этом создается файл, имеющий расширение имени .MEM. Сохраняются все ВПП или ВПП, указанные в списке <список_ВПП>. Необязательные параметры позволяют сохранить в файле все ВПП, удовлетворяющие (ALL LIKE) шаблону или все ВПП, за исключением удовлетворяющих (ALL EXCEPT) шаблону (использование в шаблоне символа * означает любое количество любых символов, использование символа ? означает один любой символ).

Для восстановления ВПП из файла в оперативную память используется команда:

RESTORE FROM <имя_файла_ВПП> [ADDITIVE]

Восстановление ВПП командой RESTORE без параметра ADDITIVE приводит к уничтожению ВПП, находившихся в оперативной памяти до выполнения этой команды.

Созданные в оперативной памяти ВПП можно уничтожить, используя команду:

RELEASE <список_ВПП> / ALL [LIKE/EXCEPT <шаблон>]

Эта команда позволяет уничтожить ВПП, перечисленные в списке <список_ВПП> или все ВПП.

RELEASE ALL – эта команда уничтожает все ВПП, аналогична команде CLEAR MEMORY.

А для уничтожения переменных А1 и B1 необходимо использовать команду:

RELEASE A1, B1

Необязательные параметры позволяют уничтожить все ВПП, подобные (ALL LIKE) <шаблону> или все ВПП, за исключением подобных (ALL EXCEPT) <шаблону>.

В ВПП можно сохранить всю информацию, находящуюся на экране, используя команду:

SAVE SCREEN TO <имя_ВПП>

При этом создается переменная типа S (Screen) с указанным именем, которая хранит образ экрана.

Восстановление образа экрана из ВПП осуществляется командой:

RESTORE SCREEN FROM <имя_ВПП>

Для сообщения СУБД о необходимости замены имени ВПП на ее значение, перед именем ВПП указывается функция макроподстановки - &.

Массивы ВПП можно использовать для перемещения информации из таблицы данных в массивы и наоборот. Команда заполнения массива данными из текущей записи:

SCATTER [ FIELDS <список_полей> ] TO <имя_массива>

Тип каждого элемента массива определяется типом заносимого данного. Если размерность массива меньше количества заносимых полей, то автоматически создается массив необходимой размерности с тем же именем.

Занесение значений элементов массива в текущую запись таблицы данных осуществляется командой:

GATHER FROM <имя_массива> [FIELDS <список_полей>]

При этом типы элементов массива должны совпадать с типами соответствующих полей. Необязательный параметр FIELDS позволяет работать только с теми полями, имена которых указаны через запятую в перечне <список_полей>.

В переменную можно ввести данные с клавиатуры, используя команду INPUT:

INPUT [<подсказка>] TO <список_ВПП>

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

Команда подсчета записей в активной таблице данных имеет формат:

COUNT [<диапазон>] [ FOR/WHILE <условие> ] [ TO < ВПП>]

Записи подсчитываются в пределах диапазона ( по умолчанию ALL). При использовании необязательных параметров FOR/WHILE в подсчете используются только те записи, которые удовлетворяют условию <условие>. Результат может быть занесен во временную переменную памяти <ВПП>.

Команда вычисления среднего значения для полей числового типа активной таблицы данных имеет формат:

AVERAGE [<диапазон>] [ <список_выражений> ]

[ FOR/WHILE < условие > ] [ TO <список_ВПП>]

Обрабатываются значения всех числовых полей, если списком выражений не указано иначе. Получаемые значения могут быть занесены в переменные памяти (см.<список_ВПП>), число которых должно равняться числу обрабатываемых полей. Параметры FOR/WHILE указывают, какие записи следует обрабатывать. Диапазон по умолчанию имеет значение ALL.

Команда вычисления суммдля числовых полей имеет формат:

SUM [<диапазон>] [<список_выражений>]

[FOR/WHILE <условие>] [TO <список_ВПП>]

Диапазон по умолчанию имеет значение ALL. Операция может выполняться не над всеми числовыми полями, а лишь над полями, указанными в списке выражений. Параметры FOR/WHILE указывают, что в суммировании участвуют значения полей тех записей, которые удовлетворяют указанному условию. Полученные суммы могут быть занесены в переменные памяти, число которых должно равняться числу обрабатываемых полей.

Система программирования xBase содержит около 100 стандартных встроенных функций. Ниже приведены некоторые из них.

Наши рекомендации