Язык программирования баз данных Informix-4GL
5c8b6e8c

Основы программирования на языке Informix-L


В данном разделе описываются такие элементы языка Informix-4GL, как константы, программные переменные, операции, выражения и операторы общего назначения.

Константы

В Informix-4GL допускаются строковые, числовые константы, константы даты и времени. Существуют три предопределенные константы: TRUE=1, FALSE=0, NOTFOUND=100.

Переменным и значениям полей таблиц допускается присваивание значения NULL. Значение NULL отлично от нуля для чисел и от пробелов для строк. Способ его кодирования считается неизвестным для программиста.

Строковая константа - последовательность символов, записанная на одной строке и заключенная в кавычки или апострофы. Для использования в строке двойных кавычек они должны быть удвоены, либо им должен предшествовать знак "\".

Числовые константы записываются в обычной для языков программирования форме, причем только по основанию 10. Допускается экспоненциальная нотация. Константы типа DATA, DATATIME, INTERVAL задаются как с помощью символьных строк, так и специальным образом.

15

654.89

12967.0e-3

"1.01.97"

"Для продолжения нажмите \"Д\""

Типы данных Informix-4GL. Программные переменные



В языке Informix-4GL имеются простые переменные, переменные типа запись и массивы. Для описания всех переменных служит оператор DEFINE, в котором задаются идентификаторы и соответствующие типы данных.

Informix-4GL поддерживает 7 различных представлений числовых данных, некоторые из которых обозначаются более чем одним ключевым словом.

Типы данных   Описание и представление
DECIMAL[(m,n)], DEC[(m,n)], NUMERIC[(m,n)]   Десятичные числа с фиксированной точкой с m (<=32) значащими цифрами, из которых n (<=m) - после запятой
DECIMAL[(m)], DEC[(m)], NUMERIC[(m)]   Десятичные числа с плавающей точкой, лежащие в интервале от 10**(-128) до 10**128 (по умолчанию DECIMAL(16))
MONEY[(m[,n])]   Денежные суммы с фиксированной точкой, соответствующие DECIMAL(m,n)
FLOAT[(n)],

DOUBLE PRECISION[(n)]

  Двоичные числа с плавающей точкой c точностью, соответствующей double в C

REAL, SMALLFLOAT   Двоичные числа с плавающей точкой c точностью, соответствующей float в C
INT, INTEGER   Целые числа в интервале от -2,147,483,647 до 2,147,483,647 аналогично integer в C
SMALLINT   Целые числа в интервале от -32,767 до 32,767 аналогично short в C
<
Informix- 4GL поддерживает следующие типы данных для отслеживания времени.

Типы данных   Описание и представление
DATE   Календарные даты, хранимые в виде целых чисел дней, прошедших от 31 декабря 1899 года
DATETIME   Моменты времени (дата и время дня), хранимые в виде десятичных чисел с плавающей точкой с нулевой дробной частью и различной точностью, зависящей от требований
INTERVAL   Интервалы времени со знаком, прошедшие между двумя значениями DATETIME
Informix-4GL располагает набором встроенных функций, выполняющих различные преобразования данных указанных типов.

Функция   Описание
DAY(date-expr)   Возвращает номер дня месяца от переменных типа DATE или DATETIME
MONTH(date-expr)   Возвращает номер месяца от переменных типа DATE или DATETIME
WEEKDAY(date-expr)   Возвращает номер дня недели от переменных типа DATE или DATETIME
EXTEND(date,quel)   Меняет точность DATE или DATETIME значений, возвращая значение DATETIME
YEAR(date-expr)   Возвращает номер года от переменных типа DATE или DATETIME
DATE(date-expr)   Преобразует целое или символьную строку в переменную типа DATE или DATETIME
MDY(m,d,y)   Строит значение DATE из целочисленных значений месяца, дня, года
TODAY   Строит значение DATE с текущим значением даты
Informix-4GL поддерживает три типа строковых данных.

Типы данных   Описание и представление
CHAR(n), CHARACTER(n)   Строки фиксированной длины до 32,767 ASCII символов
VARCHAR(m)   Строки переменной длины до 256 байт
TEXT   Символьные строки до 2**31 байт
Ниже приведен пример описания простых переменных различных типов:



Помимо перечисленных выше простых типов данных Informix-4GL позволяет организовывать записи и массивы. Переменная типа запись описывается при помощи конструкции RECORD . . . END RECORD и включает группу переменных, в общем случае различных типов и возможно другие записи.


Обращение к полю element_name записи record_name производится как record_name. element_name, а ко всем полям записи как record_name.* Конструкции LIKE table.column позволяют определять тип данных в соответствии со значением типа столбца column таблицы table. Если определить запись с помощью конструкции LIKE table.*, то запись будет иметь столько же полей, сколько столбцов в таблице table и таких же типов. Элементами записи могут быть другие записи. Переменная типа массив имеет описатель ARRAY [i,j,k] OF type, где type - тип простой переменной или конструкция RECORD. Ниже приведены примеры определения записей и массивов:



Переменные подразделяются на локальные, модульные и глобальные. Локальная переменная объявлена внутри блока function, main, report. Память под локальные переменные выделяется динамически и определение действует внутри блока, в котором переменная объявлена. Модульная переменная должна быть объявлена в самом начале модуля с исходным текстом вне любого блока report, function или main. Память под модульные переменные выделяется статически и определение действует внутри всего модуля за исключением блоков, в которых это имя переобъявлено и является для них локальным. Глобальные переменные должны быть определены с помощью блока GLOBALS . . . END GLOBALS в этом или отдельном модуле, либо в специальном файле, обращение к которому производится в виде GLOBALS "globals-filename". Для обращения к глобальным переменным в модуле ранее всех программных блоков должно содержаться их определение. Ниже приведен пример описания переменных разных классов и области их действия для программы, состоящей из трех файлов:



Областью действия глобальных переменных, определенных в файле Define.4gl, является вся программа (файлы Define.4gl, Sklad.4gl, Funk.4gl), исключая переменную init_day, которая в функции Funk1 переопределена как локальная. Аналогично областью действия модульных переменных, определенных в файле Sklad.4gl, является весь этот файл, исключая переменную audit, которая в блоке main() переопределена как локальная.



Областью действия идентификаторов форм, окон, функций и отчетов является вся программа. Область действия идентификаторов предложений PREPARE и DECLARE начинается с самого предложения и продолжается до конца модуля.

Операции в языке Informix-4GL

Числовые операции языка Informix-4GL представлены таблицей

+ сложение - вычитание
* умножение / деление
** возведение в степень mod деление по модулю
() выделение приоритета USING форматирование
Правила выполнения операций над датами подчинены следующим правилам:

time-var + interval-var = time-var;

time-var - time-var = interval-var.

Набор операций и функций для работы со строковыми типами данных и строковых преобразований в Informix-4GL представлен ниже

Операции и функция   Описание
char-var, char-var   Конкатенация строк
char-var[s,t]   Выделение подстроки значений CHAR или VARCHAR
ASCII int-var   Преобразование ASCII-кода в CHAR(1)
char-var CLIPPED   Удаление конечных пробелов
value USING "format"   Получение символьного представления значения value в соответствии с форматом
LENGTH(char-var)   Получение длины символьного выражения, исключая конечные пробелы
Логическое выражения, принимающего значения true, либо false может быть записано в одной из форм

expr1 rel_op expr2 или expr или NOT expr,

где rel_op - операция отношения из следующего набора:

Операция rel_op Описание Тип expr Примечание
= Равно Любой  
> Больше Любой  
>= Больше или равно Любой  
!=, <> Не равно Любой  
< Меньше Любой  
<= Меньше или равно Любой  
[NOT] LIKE Вхождение Символьный  
[NOT] MATCHES Вхождение Символьный  
IS [NOT] NULL NULL-значение Любой expr2 отсутствует
Несколько логических выражений могут быть объединены в более сложное с использованием логических операторов NOT, AND, OR.


При этом Informix- 4GL делает все возможное, чтобы выполнить преобразование типов данных.



Операторы общего назначения

В данном разделе обсуждаются три группы операторов языка Informix-4GL (подробный синтаксис операторов приведен в приложении Г [5]):

  • операторы присвоения значений;


  • операторы управления последовательностью выполнения программы;


  • операторы организации программы.


  • К первой группе операторов относятся:

    LET Значение, вычисленное в общем случае как результат выражения, присваиваемое простой программной переменной, элементу массива или записи.
    INITIALIZE Инициализация списка переменных или записи значением NULL или значениями, которые определены как значения по умолчанию для столбцов указанной таблицы.


    Ко второй группе операторов относятся:

    СALL Вызов функции, возвращающей нуль или более значений, указанных в конструкции RETURNING.
    FOR Заголовок цикла, заканчивающийся предложением END FOR и выполняющийся до тех пор, пока переменная цикла не достигнет предельного значения.
    FOREACH Заголовок цикла, заканчивающийся предложением END FOREACH и выполняющийся по одному разу для всех строк, возвращенных как результат запроса к базе данных.
    WHILE Заголовок цикла, заканчивающийся предложением END WHILE и выполняющийся до тех пор, пока условие, сформулированное в заголовке цикла, не станет ложным.
    CONTINUE Переход к следующей итерации цикла, к следующему пункту меню или к продолжению ввода.
    EXIT Преждевременный выход из предложений FOR, FOREACH, WHILE, MENU, INPUT, CASE или из всей программы.
    IF Заголовок условного оператора, заканчивающегося конструкцией END IF.
    CASE Заголовок оператора выбора, заканчивающегося конструкцией END CASE.
    GOTO Переход к заранее определенному месту программы на указанную метку.
    LABEL Определение метки программы для безусловного перехода.
    SLEEP Задержка выполнения программы на указанный промежуток времени.
    RETURN Возврат управления из функции, возможно, с возвратом списка выражений, число и типы которых совпадают с обозначенными в предложении RETURNING оператора CALL при вызове функции.
    RUN Запуск некоторой программы средствами операционной системы.
    <


    К третьей группе операторов относятся:

    MAIN Основной блок программы, на который передается управление при запуске и который заканчивается предложением END MAIN.
    FUNCTION Программный блок, содержащий последовательность операторов языка Informix-4GL, заканчивающийся предложением END FUNCTION и, возможно, возвращающий вызвавшей ее функции нуль или более значений посредством оператора RETURN.
    REPORT Блок, содержащий спецификации по выводу и форматированию отчета (см. гл. 4).
    Ниже приведен фрагмент программы, состоящей из двух блоков.




    Содержание раздела