Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Базы данных -> Informix -> Учебник по СУБД INFORMIX


Формат операторов 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(список атрибутов)]

В полях могут использоваться служебные символы:
символ: пример: назначение:
* *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

Права доступа 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               Ремонт индексов

Назад || Оглавление || Вперед



 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.