Формат операторов INFORMIX-4GL.Типы данных и выражения над переменными.INTEGER SERIAL[(n0)] CHAR(n) DATE SMALLINT DECIMAL(m,n) DATETIME qualif1 TO qualif2 REAL MONEY(m,n) INTERVAL qualif1 TO qualif2 FLOAT RECORD ARRAY [i,j,k] OF datatype где qualif \in {YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,FRACTION(n)} Операции числовые: ** * / mod + - ( ) Все аргументы, в том числе CHAR, преобразуются к типу DECIMAL Внимание: -7 mod 3 = -1 Внимание: mod и ** нельзя использовать в операторе SELECT Можно пользоваться встроенными функциями 4GL (см. "Функции 4GL") и функциями на языке Си. Операции над строками:string1,string2 сцепить string [m,n] подстрока string CLIPPED усечь пробелы справа string USING "формат" форматировать string WORDWRAP переносить длинную строку Выражения над датами:time + interval = time time - time = interval Логические выражения:=, != или <>, <=, >=, <, > NOT , OR, AND выражение IS [NOT] NULL по умолчанию "\" string [NOT] LIKE "шаблон" [ESCAPE "escape-char"] спецсимволы шаблона % _ означают ¦ §! string [NOT] MATCHES "шаблон" [ESCAPE "esc-char"] спецсимволы шаблона * ? [ abH ] [^ d - z ] означают "много", "один", "любой из", "ни один из" Системные переменные:Устанавливаются после любого оператора 4GL status { 0 | NOTFOUND | <0 } код завершения оператора quit_flag ( не 0 если было нажато QUIT ) int_flag ( не 0 если было нажато ^C ) define SQLCA record # системная запись с кодами завершения SQLCODE integer, =status SQLERRM char(71), - SQLERRP char(8), - SQLERRD array[8] of int,...„см. SQLAWARN char(8) warning или пробел end record SQLERRD[1] зарезервирован SQLERRD[2] serial значение или ISAM error cod SQLERRD[3] число обработанных строк SQLERRD[4] CPU cost запроса SQLERRD[5] offset of error into SQL-st SQLERRD[6] ROWID of last row SQLERRD[7] зарезервирован SQLERRD[8] зарезервирован Операторы организации программы.MAIN Главный блок (должен быть ровно один) . . . END MAIN CALL function-name ([список аргументов]) [RETURNING возвр. знач] FUNCTION function-name ([список аргументов]) . . . Аргументы передаются [RETURN expr-list] по значению . . . END FUNCTION REPORT report-name(variable-list) [DEFINE-statement] . . . [OUTPUT output-statement . . .] [ORDER [EXTERNAL] BY sort-list FORMAT format-statement . . . 4gl-statement . . . END REPORT Генерация отчетов.START REPORT report-name [TO {file-name | PRINTER | PIPE program}] OUTPUT TO REPORT report-name (выражение, выражение [, ...]) FINISH REPORT report-name Объявления переменных.DEFINE список переменных { type | LIKE table.column | RECORD {LIKE table.* | список переменных [,..] END RECORD} } [,...] где type может быть следующим: INTEGER CHAR(n) DATE SMALLINT DECIMAL(m,n) DATETIME qualif1 TO qualif2 REAL MONEY(m,n) INTERVAL qualif1 TO qualif2 FLOAT RECORD ARRAY [i,j,k] OF datatype где qualif Ё {YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,FRACTION(n)} GLOBALS { "файл с GLOBALS объявлениями" | DEFINE-st Должен лежать вне любого блока во всех . . . модулях, где эти переменные используются END GLOBALS } Присвоения.INITIALIZE список переменных {LIKE column-list | TO NULL} присвоить переменным NULL или DEFAULT значения LET переменная = выражение Перехват прерываний.WHENEVER { ERROR | WARNING | NOT FOUND } { GOTO [:]label | CALL function-name | CONTINUE | STOP } !!! function-name без () !!! DEFER INTERRUPT Запретить прерывание программы клавишей ^C DEFER QUIT Запретить прерывание программы клавишей QUIT Тогда после нажатия QUIT => quit_flag!=0, ^C => int_flag!=0 Программные операторы.CALL function([список аргументов]) [RETURNING список переменных] ! ! ! передача по значению CASE CASE (выражение) WHEN логич.выраж. WHEN выраж1 . . . или . . . [EXIT CASE] [EXIT CASE] . . . . . . WHEN логич.выраж. WHEN выраж2 . . . . . . [OTHERWISE] [OTHERWISE] . . . . . . END CASE END CASE IF логическое выражение THEN . . . [ELSE . . . ] END IF не забывайте закрывать все операторы IF !!! FOR I= i1 TO i2 [STEP i3] statement . . . [CONTINUE FOR] . . . [EXIT FOR] . . . END FOR CONTINUE { FOR | FOREACH | MENU | WHILE } EXIT { CASE | WHILE | FOR | FOREACH | MENU | INPUT | DISPLAY | PROGRAM[(status code for UNIX)] } WHILE логическое выражение операторы . . . . . . [CONTINUE WHILE] . . . [EXIT WHILE] . . . END WHILE GOTO [:] метка Двоеточие ':' для совместимости с ANSI стандартом LABEL метка: Действует только внутри блока RUN {"командная строка UNIX"|char-variable} [RETURNING int-variable | WITHOUT WAITING] SLEEP целое-выраж. Подождать n секунд Меню, окна.MENU "Название меню" COMMAND { KEY (key-list) | [KEY (key-list)] "kоманда меню" [" подсказка help"] [HELP help-number] } Либо key, либо первая буква, обязаны быть латинскими. statement . . . [CONTINUE MENU] . . . [EXIT MENU] . . . [NEXT OPTION "kоманда меню" # Перейти к [COMMAND . . . ] . . . END MENU OPTIONS { По умолчанию: PROMPT LINE p | FIRST MESSAGE LINE m | FIRST + 1 FORM LINE f | FIRST + 2 COMMENT LINE c | LAST [-1] ERROR LINE e | LAST INPUT { WRAP | NO WRAP } | NO WRAP INSERT KEY key-name | Вставить F1 !! Не применять: DELETE KEY key-name | Удал. стр F2 CONTROL-A,D,H,L, NEXT KEY key-name | Страница F3 CONTROL-Q,R,X, PREVIOUS KEY key-name | Страница F4 CONTROL-C,S,Q,Z ACCEPT KEY key-name | ESC HELP FILE "help-file" | Предварительно откомпилированный HELP KEY key-name | CONTROL-W утилитой mkmessage INPUT ATTRIBUTE(список атрибутов) | DISPLAY ATTRIBUTE(список атрибутов) } [,...] атрибуты: NORMAL REVERSE FORM использовать атрибуты BOLD UNDERLINE WINDOW текущего окна INVISIBLE BLINK OPEN WINDOW window-name AT row, column WITH { integer ROWS, integer COLUMNS | FORM "form-file" } [ATTRIBUTE(список аттрибутов)] Атрибуты: BORDER По умолчанию: нет BOLD, DIM, INVISIBLE, NORMAL NORMAL REVERSE, UNDERLINE, BLINK нет PROMPT LINE n FIRST MESSAGE LINE m FIRST + 1 FORM LINE m FIRST + 2 COMMENT LINE m LAST CURRENT WINDOW IS { window name | SCREEN } CLEAR {SCREEN | WINDOW window-name | FORM | список полей} CLOSE WINDOW window-name OPEN FORM form-name FROM "form-file" Без расширения .frm DISPLAY FORM form-name [ATTRIBUTE(список аттрибутов)] CLOSE FORM form-name Простые операторы вывода на экран.MESSAGE список переменных, констант [ATTRIBUTE(список атрибутов)] ERROR список переменных, констант [ATTRIBUTE(список атрибутов)] по умолчанию REVERSE PROMPT список переменных и констатнт [ATTRIBUTE(аттрибуты вывода)] FOR [CHAR] variable [HELP help-number] # Ввести значение в variable [ATTRIBUTE(аттрибуты ввода)] # FOR CHAR - ввести один символ [ON KEY (key-list) statement атрибуты: NORMAL REVERSE . . . BOLD UNDERLINE . . . DIM BLINK END PROMPT] INVISIBLE в ON KEY пункте нельзя напрямую пользоваться операторами PROMPT, INPUT.Для их вызова применяйте функции. Ввод/вывод через экранные формы.Вывести в форму DISPLAY { BY NAME список переменных | список переменных TO {список полей|screen-record[[n]].*}[,..] | список переменных AT row, column } [ATTRIBUTE(список атрибутов)] [Не стирать значений из формы перед вводом] INPUT { BY NAME список переменных [WITHOUT DEFAULTS] | список переменных [WITHOUT DEFAULTS] FROM {список полей | screen-record[[n]].*}[,...]} [ATTRIBUTE(список атрибутов)] [HELP help-number] [ { BEFORE FIELD подсписок полей по клавише ESC | AFTER { FIELD подсписок полей | INPUT } | ON KEY (key-list) } statement . . . [NEXT FIELD field-name] [EXIT INPUT] statement . . . . . . END INPUT ] конструирует WHERE условие для QUERY BY EXAMPLE CONSTRUCT {BY NAME char-variable ON column-list | char-variable ON column-list FROM {список полей | screen-record[[n]].*}[,...]} [ATTRIBUTE(список атрибутов)] В полях могут использоваться служебные символы:
call set_count(кол-во выводимых строк) в программном массиве DISPLAY ARRAY record-array TO screen-array.* [ATTRIBUTE(список атрибутов)] [ ON KEY (key-list) . . . [EXIT DISPLAY] . . . END DISPLAY ] | [END DISPLAY] SCROLL {field-list | screen-record.*} [,...} Прокрутить строки {UP | DOWN} [BY int] в экранном массиве call set_count(кол-во выводимых строк) в программном массиве INPUT ARRAY record-array [WITHOUT DEFAULTS] FROM screen-array.* [HELP help-number] [ATTRIBUTE(атр.)] [{BEFORE {ROW | INSERT | DELETE | FIELD подсписок полей}[,...] | AFTER {ROW|INSERT|DELETE|FIELD подсписок полей |INPUT}[,...] | ON KEY (key-list) } statement ... [NEXT FIELD field-name] statement... [EXIT INPUT] . . . . . . END INPUT ] Внутри оператора DISPLAY ARRAY можно пользоваться функциями: arr_curr() номер текущей строки прогр. массива arr_count() число заполненных строки прогр. массива scr_line() номер текущей строки экр. массива CALL showhelp(helpnumber) - вывести help Динамическое создание операторов.PREPARE statement-id FROM {char-variable | "SQL-оператор [ы] "} Изготовить SQL - statement из символьной строки Нельзя включать имена переменных, нужно заменять их на знак ? Нельзя готовить операторы: DECLARE PREPARE LOAD OPEN EXECUTE UNLOAD CLOSE FETCH SELECT INTO variables EXECUTE statment-id [USING input-list] Выполняет, заменив знаки ? на input-list FREE { statment-id | cursor-name } Манипуляция "курсором".DECLARE cursor-name [SCROLL] CURSOR [WITH HOLD] FOR { SELECT-st [FOR UPDATE [OF column-list]] | INSERT-st | statment-id } SCROLL - фактически, создается временная таблица. statment-id - приготовленого PREPARE HOLD - игнорировать конец транзакции Внимание: SCROLL cursor нельзя открывать FOR UPDATE, зато для не-SCROLL cursora можно использовать Внимание: оператор DECLARE cursor-name должен располагаться в тексте программы выше любого использования этого курсора. OPEN cursor-name [USING список переменных] CLOSE cursor-name для SELECT-курсора: FOREACH cursor-name [INTO список переменных] . . . [CONTINUE FOREACH] . . . [EXIT FOREACH] . . . END FOREACH FETCH { NEXT | PREVIOUS | FIRST | LAST | CURRRENT | RELATIVE m | ABSOLUTE n ] cursor-name [INTO список переменных] если cursor not SCROLL то можно только NEXT если строки не обнаружено, то status=NOTFOUND для INSERT-курсора: PUT cursor-name [FROM список переменных] ввести строку в буфер, [заменив знаки ? для DECLAREd INSERT-st на список переменных] FLUSH cursor-name вытолкнуть буфер ^^ SQL операторы ^^ Описания CREATE, DROP, DATABASE, ALTER, RENAME Манипуляция данными DELETE, INSERT, UPDATE, LOAD, UNLOAD Права доступа GRANT/REVOKE, LOCK/UNLOCK TABLE, SET LOCK MODE Операторы транзакции и восстановления BEGIN WORK, COMMIT WORK, ROLLBACK WORK, START DATABASE, ...
Операторы описания данных не откатываются !
Примечание: подчеркнутые операторы нельзя использовать в 4GL, а можно только в INFORMIX-SQL
|