Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

4.2 Переменные Переменные процедурного языка HyTech

Поддерживаются переменные двух типов: локальные и глобальные. Переменные, объявленные вне процедуры, считаются глобальными. Переменные, объявленные внутри процедуры, являются локальными.

Глобальные переменные существуют в течение всего сеанса пользователя и удаляются только при завершении сеанса. Глобальную переменную достаточно один раз объявить (создать), а затем использовать во всех последующих SQL-скриптах, посылаемых пользователем. Однако глобальные переменные у каждого пользователя свои. Для обмена информацией между одновременно работающими пользователями следует использовать таблицы.

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

Любая переменная, которая не была объявлена в выполняемой программе, считается именем глобальной переменной, созданной ранее.

Объявление переменной может располагаться в любом месте программы (процедуры), но до первого использования переменной в программе (процедуре).

Формат объявления:

var Переменная [ = Выражение ] ,...; variable Переменная [ = Выражение ] ,...; declare variable Переменная [ = Выражение ] ,...

Аргументы:

Аргумент

Значение

Переменная

Имя объявляемой переменной. Имя переменной должно начинаться с латинской буквы или символа «подчеркивание» и может содержать латинские буквы, десятичные цифры или символ «подчеркивание».

Выражение

Выражение, значение которого вычисляется и присваивается объявляемой переменной. Производится так называемая инициализация переменной. Если переменная не инициализируется, то ее значение не определено. Чтение значения такой переменной приведет к ошибке. В неинициализированную переменную можно только записать новое значение. Неинициализированную переменную нельзя использовать в процедуре в качестве параметра типа in или inout.

Примеры объявления:

declare variable @z = 12e-2; variable @y = 0x24; var @x = 1, @s = 'Hello world!\n'; select @s as RESULT from TABLES union select @x as RESULT from TABLES union select @y as RESULT from TABLES union select @z as RESULT from TABLES;

4.3 Типы данных Типы данных для хранения целочисленных и действительных значений Типы данных float, double, currency

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

Тип

Разрядность мантиссы x86

Целые числа

float

23 бит + 1 скрытый бит

до ~100 000 000

currency

52 бита + 1 скрытый

до ~100 000 000 000 000 000

double

52 бита + 1 скрытый

до ~100 000 000 000 000 000