Типы Переменных и Операторы Описания Переменных в 4GL.
Типы Переменных и Операторы Описания Переменных в 4GL.
В языке 4GL имеются простые переменные, переменные типа запись и массивы. Простые переменные бывают следующих типов: INTEGER CHAR(n) DATE SMALLINT DECIMAL(m,n) DATETIME ед_врем1 TO ед_врем2 REAL MONEY(m,n) INTERVAL ед_врем1 TO ед_врем2 FLOAT
где ед_врем1, ед_врем2 - единицы измерения времени {YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,FRACTION(n)}
где FLOAT = DOUBLE PRECISSION
Переменная типа запись описывается при помощи конструкции RECORD ... END RECORD или конструкции LIKE имя_таблицы.*
Переменная типа массив имеет описатель ARRAY [i,j,k] OF type, где type - тип простой переменной, конструкция RECORD, или конструкция ARRAY.
Для описания переменных служит оператор DEFINE: DEFINE simw char (200), j,i,k INTEGER, ff FLOAT # Здесь объявлены символьная переменная simw длиной 200 байт, # целые i,j,k, и ff - восьмибайтовое с плавающей точкой
DATABASE zawod DEFINE doljno RECORD # объявляется запись doljno, состоящая из 4 простых переменных dolzn CHAR(20), # должность zarplmin LIKE kadry.zarplata, zarplmax money(16,2), # зарплата vakansii int # вакансии END RECORD # Здесь заканчивается объявление записи doljno # Переменную можно оъявить с ключевым словом LIKE column_name. # переменная zarplmin получает такой же тип, что и столбец # zarplata таблицы kadry из базы данных zawod
DEFINE rrr RECORD LIKE kadry.* # Переменную типа запись тоже можно объявить с ключевым словом # LIKE. Здесь объявлена запись rrr, содержащая элементы, имею- # щие те же самые названия и те же самые типы что и столбцы # таблицы kadry
Элементами записи могут быть массивы. Можно обьявить массив элементов типа RECORD. DEFINE zap RECORD a LIKE kadry.tabnom, b array[8] OF REAL END RECORD,
massiw ARRAY[2,15] OF RECORD kolwo INT, tip CHAR(8) END RECORD # massiw объявлен как массив записей. Каждая запись состоит # из двух простых элементов - kolwo и tip
Индексы массивов пишутся в квадратных скобках. На элементы записей можно ссылаться по его имени, если не допускается двусмысленности, иначе их необходимо уточнять именем записи, отделяя его точкой (.) от простого имени. # присвоить значение элементу массива можно так: LET massiw[1,i+2].kolwo = zap.a + LENGTH(massiw[1,i+2].tip)
Для сокращения перечисления элементов в списках можно пользоваться нотацией (*). Например, strkt.* означает все элементы записи strkt. А так же нотацией THRU: (элементы записи от и до) SELECT kadry.* INTO strkt.* FROM kadry WHERE kadry.tabnom=i+j
SELECT * INTO strukt.b THRU strkt.e FROM kadry
Глобальные переменные должны иметь одинаковые объявления GLOBALS во всех модулях программы (в которых используются). Проще всего это организуется так: заводится отдельный модуль, в котором ничего, кроме объявлений GLOBALS нет. А во всех остальных модулях программы ссылаются на этот файл. Ниже приводится пример объявления глобальных переменных в файле progrglob.4gl: DATABASE zawod GLOBALS DEFINE zap RECORD LIKE kadry.* DEFINE ext_count INT . . . END GLOBALS
Тогда в остальные модули программы, где используются эти глобальные переменные, надо включить строчку GLOBALS "progrglob" . . .