Формат операторов INFORMIX-4GL
Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

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

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

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...