Язык программирования баз данных Informix-4GL

         

Запросы по образцу


Informix-4GL содержит средства, позволяющие использовать экранную форму и несколько другим путем: помещая литеральные значения и ограничения на значения в поля экранной формы во время выполнения программы, пользователь формирует условия для запроса. Такой процесс называется запросом по образцу (Query-by-example). Оператор CONSTRUCT используется для создания переменной типа Char и формирования булевого выражения, построенного на экранном запросе Query-by-example. Указанный оператор в значительной степени похож на оператор INPUT и содержит список имен столбцов базы данных и список имен полей экранной формы, ассоциированных с этими столбцами. При совпадении имен полей экранной формы и имен столбцов конструкция BY NAME позволяет исключить из оператора CONSTRUCT список имен полей экранной формы. Конструкции BEFORE (AFTER) FIELD, BEFORE (AFTER) CONSTRUCT, ON KEY в операторе CONSTRUCT используются аналогично соответствующим конструкциям оператора INPUT. При вводе параметров поиска Query-by-example необходимо придерживаться следующего синтаксиса:



Символ Значение Тип данных Использование
= равно все по умолчанию
> больше все >x
< меньше все >x
>= больше или равно все >=x
<= меньше или равно все <=x
<> не равно все <>x
: диапазон все x:y
* ноль или больше символов Char *x, x*, *x*
? один символ Char ?x, x?, ?x?, x??
. . диапазон Datetime, Interval x . . y
| или все x | y

Ввод в поле значения литерала равносильно формированию условия равенства на значение соответствующего столбца.

Ввод данных по оператору CONSTRUCT так же, как и для оператора INPUT завершается нажатием клавиши ESC, либо управляющей клавиши, определенной параметром ACCEPT KEY в операторе OPTIONS, либо нажатием клавиши RETURN после ввода последнего поля экранной формы при условии действия опции INPUT NO WRAP в операторе OPTIONS. В случае опции INPUT WRAP в операторе OPTIONS нажатие клавиши RETURN после ввода последнего поля экранной формы приводит к циклическому перемещению курсора на первое поле экранной формы.
Если после окончания ввода критерия поиска в поля экранной формы ни в одно из полей не введено значений, сформированное условие в текстовой переменной, указанной в операторе CONSTRUCT, имеет вид " 1=1".

На основании введенных данных в поля экранной формы в текстовой переменной, указанной в операторе CONSTRUCT, формируется булевое выражение, которое впоследствии может использоваться при формировании оператора SQL:

  • к постоянной части оператора SELECT (INSERT, DELETE, UPDATE) после фразы WHERE добавляется условие, хранимое в переменной, указанной в операторе CONSTRUCT;


  • выполняется оператор PREPARE для составленного текста SQL-оператора;


  • объявляется курсор для структуры, сформированной в операторе PREPARE;


  • открывается курсор и оператором FETCH (FOREACH) выполняется чтение строк, удовлетворяющих сформированному запросу.


  • Отметим два 4GL-оператора общего использования, полезных при разработке программных приложений. Оператор WHENEVER с опциями GOTO, CALL, CONTINUE позволяет определить действия, которые необходимо выполнить в случае возникновения ошибок при исполнении программы. Данный оператор особенно полезен при динамическом формировании операторов, когда в тексте оператора возможны ошибки. Отслеживая состояние системных переменных sqlca.sqlcode и STATUS пользователь сам обрабатывает возникающие ошибки. Значение по умолчанию для ERROR - STOP, для WARNING - CONTINUE. Оператор DEFER запрещает прерывание ввода (обычно DEL или Control-C) и прерывание программы (Control-\).




    Содержание раздела