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

         

Общие принципы работы с SQL в Informix-L


В Informix-4GL операторы SQL встраиваются в исходную программу так, как если они были бы выполняемыми операторами ее основного языка.

Выполнение оператора SQL фактически является вызовом сервера базы данных. Информация должна передаваться от программы-клиента программе-серверу и возвращаться обратно. Часть этих взаимодействий осуществляется через так называемые главные переменные, посредством которых передаются входные данные для SQL-описаний и возвращаются результаты запроса. Ни при объявлении, ни при использовании внутри SQL-описаний главные переменные в языке Informix-4GL никак не выделяются и не отличаются от обычных переменных языка Informix-4GL. SQL-описания в программе на языке Informix-4GL так же, как и главные переменные, никак не выделяются.

Для обработки ошибок, связанных с выполнением SQL-запросов в программе на языке Informix-4GL, доступна структура SQLCA, описанная в прил. А [5]. Доступ к отдельным полям структуры выполняется обычным образом (sqlca.sqlcode, sqlca.sqlerrd[3] и т.д.). Переменная sqlca.sqlcode доступна также в 4GL-программе под именем STATUS, если проверка значения STATUS выполняется непосредственно после SQL-запроса. При этом STATUS устанавливается в 0, если оператор выполнен правильно, в отрицательное значение в случае ошибки и равен NOTFOUND (100), если операторы Select или Fetch не нашли никаких строк данных. Если переменная STATUS проверяется после 4GL-оператора, она содержит код завершения последнего оператора языка Informix-4GL.

К простейшим формам SQL-запросов относятся операторы SELECT, возвращающие единственную строку, а также SQL-операторы, выполняющие простейшие действия по модификации базы данных без использования аппарата курсора.

Единственным отличием приведенных выше SQL-запросов от интерактивных SQL-операторов [7,8] является наличие спецификатора Into, задающего главные переменные, которые используются как получатели данных и в условии Where. Если записанный выше оператор Select производит более одной строки данных, то сервер базы данных возвратит код ошибки.
В SQL- запросе не требуется, чтобы главная переменная, в которую помещается значение, имела бы в точности такой же тип данных, что и в таблице. Сервер делает все возможное для преобразования данных из столбцов в форму, используемую переменными-получателями этих данных.

Как уже отмечалось ранее, Informix-4GL поддерживает NULL-значения переменных. Их использование показано на примере.



Замечание. В программе на Informix-4gl оператор Database может преследовать две цели; одна - процедурная, другая - непроцедурная. Этот оператор делает базу данных текущей (процедурная цель) и говорит компилятору, где найти информацию о составе столбцов таблиц для использования при исполнении конструкции LIKE и нотации <имя таблицы>.* (непроцедурная цель). Если указанных конструкций в программе нет, то оператор Database может появиться с процедурной целью в любом месте программы, с непроцедурной целью оператор Database должен появиться за пределами программы и предшествовать блоку GLOBALS с тем, чтобы компилятор при обработке конструкций LIKE и <имя таблицы>.* имел информацию о составе таблиц базы данных на этапе трансляции.


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