/usr/local/apache/htdocs/lib/public_html/book/SCHOOL/h4gl.txt Библиотека на Meta.Ua . 4GL Формат операторов
<META>
Интернет
Реестр
Новости
Рефераты
Товары
Библиотека
Библиотека
Попробуй новую версию Библиотеки!
http://testlib.meta.ua/
Онлайн переводчик
поменять

Формат операторов 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 (см. Dh4fuE "Функции
4GL") и функциями на языке Си (см. Dh4gcfuE "Присоединение Си к
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"]
спецсимволы шаблона D%E D_E означают і ї!
string [NOT] MATCHES "шаблон" [ESCAPE "esc-char"]
спецсимволы шаблона D*E D?E D[EabHD]E D[^EdD-EzD]E
означают "DмногоE", "DодинE", "Dлюбой изE", "Dни один изE"

см. так же логические выражения, допустимые только в
предложении WHERE

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


(Устанавливаются после любого оператора 4GL)

DstatusE { 0 | NOTFOUND | <0 } код завершения оператора
Dquit_flagE ( не 0 если было нажато QUIT )
Dint_flagE ( не 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) см. файл DformatE
[DEFINE-statement]
. . .
[OUTPUT
output-statement
. . .]
[ORDER [EXTERNAL] BY sort-list
FORMAT
format-statement
. . .
4gl-statement
. . .
END REPORT

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

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 DREVERSEE 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
DREVERSEE, 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 DREVERSEE
. . . BOLD UNDERLINE
. . . DIM BLINK
END PROMPT] INVISIBLE
в ON KEY пункте нельзя напрямую пользоваться операторами
PROMPT, INPUT. Для их вызова применяйте функции.

Ввод вывод через экранные формы
Вывести в форму
DISPLAY { BY NAME список переменных |
список переменных TO {список полей|screen-record[D[EnD]E].*}[,..] |
список переменных AT row, column }
[ATTRIBUTE(список атрибутов)]

[Не стирать значений из формы перед вводом]
INPUT { BY NAME список переменных [WITHOUT DEFAULTS] |
список переменных [WITHOUT DEFAULTS] FROM
{список полей | screen-record[D[EnD]E].*}[,...]}
[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[D[EnD]E].*}[,...]}
[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-оператор [ы] "}

Изготовить DSQLE-statement из символьной строки

Нельзя включать имена переменных, нужно заменять их на знак ?


DНельзяE готовить операторы:

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 вытолкнуть буфер

D^^E DSQL операторыE D^^E


Описания CREATE, DROP, DATABASE, ALTER, RENAME Ў create

Манипуляция данными DELETE INSERT UPDATE LOAD UNLOAD Ў delete

Оператор SELECT SELECT Ў select

Права доступа GRANT/REVOKE, LOCK/UNLOCK TABLE, SET LOCK MODE Ў grant

Операторы транзакции и восстановления BEGIN WORK, COMMIT WORK, ROLLBACK WORK, START DATABASE, ... Ў commit


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

Операторы оисания данных Dне откатываютсяE !



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 DсравнениеE выраж1

где DсравнениеE  =,>,<,>=,<=,<>,!=

column-name IS [NOT] NULL

выраж [NOT] BETWEEN выраж1 AND выраж2

выраж [NOT] IN (выраж1 , ... [, ...] )


по умолчанию "\"

строка [NOT] LIKE "шаблон" [ESCAPE "escape-char"]

спецсимволы шаблона D%E D_E означают "много" "один"

строка [NOT] MATCHES "шаблон" [ESCAPE "esc-char"]

спецсимволы шаблона D*E D?E означают "DмногоE" "DодинE"

D[EabHD]E D[^EdD-EzD]E "Dодин изE" "Dни один изE"


выраж DсравнениеE {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 Ремонт индексов
Комментарии
Анонимно
Войти под своим именем


Ник:
Текст сообщения:
Введите код:  

Загрузка...
Поиск:
добавить сайт | реклама на портале | контекстная реклама | контакты Copyright © 1998-2020 <META> Все права защищены