InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Формат операторов 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 (см. h4fu "Функции
4GL")  и  функциями на языке Си (см. h4gcfu "Присоединение Си к
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] означают "много", "один", "любой из", "ни один из" см. так же логические выражения, допустимые только в предложении WHERE

Системные переменные:


(Устанавливаются после любого оператора 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) см. файл format [DEFINE-statement] . . . [OUTPUT output-statement . . .] [ORDER [EXTERNAL] BY sort-list FORMAT format-statement . . . 4gl-statement . . . END REPORT

Генерация отчетов (см. так же файл format)


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(список атрибутов)] в полях могут использоваться служебные символы: символ: пример: назначение: * *X произвольная строка ? X? произвольный символ | abc|cdef или >,<, >=,<=,<> >X : X:YW промежуток .. Date..Date промежуток между датами 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 Оператор SELECT SELECT Права доступа GRANT/REVOKE, LOCK/UNLOCK TABLE, SET LOCK MODE Операторы транзакции и восстановления BEGIN WORK, COMMIT WORK,
ROLLBACK WORK, START DATABASE, ...

Операторы описания данных


Операторы оисания данных не откатываются ! CREATE DATABASE db-name [WITH LOG IN "pathname" [MODE ANSI]] Стандарт ansi требует имя владельца, транзакция по умолчанию DROP DATABASE { database-name | char-variable } DATABASE database-name [EXCLUSIVE] Сделать текущей CLOSE DATABASE CREATE [TEMP] TABLE table-name( column-name datatype [NOT NULL] [UNIQUE [CONSTRAINT constr-name]] [,...] ) [UNIQUE(uniq-col-list) [CONSTRAINT constr-name] ] [,..] [WITH NO LOG] [IN "pathname-directory"] где datatype может быть: INTEGER SERIAL[(n0)] DATE SMALLINT DECIMAL(m,n) DATETIME qualif1 TO qualif2 REAL MONEY(m,n) INTERVAL qualif1 TO qualif2 FLOAT CHAR(n) qualifier \in {YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,FRACTION(n)} ALTER TABLE table-name # Недопустим для временых таблиц { ADD ( new-column-name datatype [NOT NULL] [UNIQUE [CONSTRAINT constr-name]][,...] ) [BEFORE old-column-name] | DROP (old-column-name[,...]) | MODIFY (old-column-name new-datatype [NOT NULL][,...]) | ADD CONSTRAINT UNIQUE (old-column-name[,...]) [CONSTRAINT constr-name] | DROP CONSTRAINT (constr-name[,...]) } [,...] RENAME TABLE old-table-name TO new-table-name RENAME COLUMN table.old-column-name TO new-column-name CREATE VIEW view-name [(column-list)] AS SELECT-statement [WITH CHECK OPTION] CREATE [UNIQUE|DISTINCT] [CLUSTER] INDEX index-name ON table-name (column-name [DESC], ...) ALTER INDEX index-name TO [NOT] CLUSTER Упорядочить таблицу CREATE SYNONYM synonym-name FOR table-name DROP VIEW view-name DROP TABLE table-name DROP INDEX index-name DROP SYNONYM synonym-name UPDATE STATISTICS [FOR TABLE table-name] В системном каталоге SET EXPLAIN {ON | OFF} Выводить системные объяснения в sqlexplain.out

Операторы манипуляции данными


DELETE FROM table-name [WHERE {condition | CURRENT OF cursor-name}] !* Только в 4GL *! INSERT INTO table-name [(column-list)] { VALUES (value-list) | SELECT-statement } UPDATE table-name SET {column-name ={ expression | (SELECT-st) } [,...] | {(col-list) | [table.]*} = { ({ expr-list | (SELECT-st) } [,...]) | record-name.* } [WHERE {condition | CURRENT OF cursor-name}] !* Только в 4GL *! LOAD FROM "file-name" [DELIMITER "?"] { INSERT INTO table [(col-list)] | char-variable with INSERT-st } UNLOAD TO "file" [DELIMITER "?"] SELECT-statement формат файла по умолчанию: столбец1|столбец2| ... ||столбецn| ... значение|значение| ... значение| OUTPUT TO {FILENAME | PIPE program} [WITHOUT HEADINGS] SELECT-st только в INFORMIX-SQL

Оператор SELECT


SELECT [ALL | UNIQUE] column-expr [col-lable] [,...] [INTO список переменных] !* Только в 4GL *! FROM { [OUTER] table-name [tab-alias] | OUTER (table-expr) } [,...] -проверять условие только для этой (менее [WHERE condition] надежной) таблицы [GROUP BY column-list [HAVING condition] ] [ORDER BY column-name [DESC],...] [INTO TEMP table-name] WHERE conditions: связанные логическими операторами OR, AND, NOT сравнения выраж1 сравнение выраж1 где сравнение =,>,<,>=,<=,<>,!= column-name IS [NOT] NULL выраж [NOT] BETWEEN выраж1 AND выраж2 выраж [NOT] IN (выраж1 , ... [, ...] ) по умолчанию "\" строка [NOT] LIKE "шаблон" [ESCAPE "escape-char"] спецсимволы шаблона % _ означают "много" "один" строка [NOT] MATCHES "шаблон" [ESCAPE "esc-char"] спецсимволы шаблона * ? означают "много" "один" [abH] [^d-z] "один из" "ни один из" выраж сравнение {ALL | [ANY | SOME]} (SELECT-оператор) выраж [NOT] IN (SELECT-оператор) !* Обыкновенный *! [NOT] EXISTS (SELECT-оператор) !* SQLевский *!

Операторы задания прав доступа (не откатываются).


{DBpriv {PUBLIC право давать права GRANT | TO | [WITH GRANT OPTION] [AS grantor] TBpriv [,..] ON table} user-list} от имени grantor {DBpriv REVOKE | FROM { PUBLIC | user-list } TBpriv [,..] ON table} TABLE PRIVILEGES: DATABASE PRIVILEGES: ALTER DELETE INDEX INSERT CONNECT работать SELECT[(cols)] RESOURCE создавать объекты UPDATE [(cols)] DBA все ALL [PRIVILEGES] SET LOCK MODE TO [NOT] WAIT ждать [не ждать] освобождения блокир. строк LOCK TABLE table-name IN {SHARE | EXCLUSIVE} MODE {Можно смотреть | Ничего нельзя} UNLOCK TABLE table-name

Операторы транзакций, восстановления данных


CREATE DATABASE db-name WITH LOG IN "/pathname" [MODE ANSI]] START DATABASE db-name WITH LOG IN "/pathname" [MODE ANSI] стартовать новый системный журнал (log-файл) DATABASE database-name [EXCLUSIVE] Сделать текущей ROLLFORWARD DATABASE database-name Накатить базу из копии CLOSE DATABASE вперед по системному журналу BEGIN WORK Начало транзакции Внимание!! Все . . . измененные строки блокируются!! COMMIT WORK Kонец транзакции ROLLBACK WORK Откатить изменения к предыдущему COMMIT CREATE AUDIT FOR table-name IN "pathname" . . . RECOVER TABLE table-name Восстановить таблицу DROP AUDIT FOR table-name VALIDATE список переменных LIKE column-list удовлетворяют ли переменные допустимым значениям для этих столбцов (syscolval)? если нет то status<0 ПРИМЕЧАНИЕ: подчеркнутые операторы нельзя использовать в 4GL, а можно только в INFORMIX-SQL INFO { TABLES | { COLUMNS | INDEXES | ACCES | PRIVILEGES | STATUS } FOR table-name } CHECK TABLE owner.table-name Проверить индексы REPAIR TABLE table-name Ремонт индексов


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua