Тема 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 стандартных встроенных функций. Ниже приведены некоторые из них.