Многомодульные приложения
Реализация встроенного SQL имеет ограничение на видимость имен переменных основного и встроенного языка. Все переменные, за исключением:
-
неявно заданной переменной «соединение по умолчанию»;
-
переменной
sqlca
; -
псевдопеременных
SQLCODE
,SQLSTATE
,ErrPCI
,CntPCI
,IsnPCI
,LenPCI
,TxtPCI
;
имеют локальную область видимости.
Переменная sqlca по умолчанию экспортируется библиотекой PCL. Кроме того, можно задавать ее область видимости явно путем указания флага -M
(sqlca принадлежит модулю, претранслированному с флагом M
, см. в подразделе «Обращение к прекомпилятору»). Только один модуль может быть претранслирован с этим флагом. Остальные претранслируются с флагом -E
или -L
:
-
-E
(extern sqlca – модуль использует переменную sqlca, объявленную в другом модуле); -
-L
(static sqlca – модуль использует свою локальную переменную sqlca); -
-I
(import sqlca – модуль использует переменную sqlca, импортируемую из PCL). По умолчанию используется этот флаг.
Псевдопеременные SQLCODE
, SQLSTATE
, ErrPCI
, CntPCI
, IsnPCI
, LenPCI
, TxtPCI
имеют глобальную область видимости.
Для того чтобы использовать встроенный SQL в многомодульных приложениях, необходимо придерживаться следующих правил:
-
использовать соединение по умолчанию. Все остальные соединения локальны;
-
все глобальные переменные основного языка желательно описывать в отдельном модуле основного языка в секции описаний переменных основного языка;
-
модули, в которых используются эти переменные, должны содержать секцию описаний переменных основного языка, где перечислены глобальные переменные с модификатором
extern
; -
предложения SQL, курсоры и другие переменные встроенного SQL должны использоваться в том же модуле, где они явно или неявно декларированы (например, путем операции
PREPARE
). Эти переменные всегда локальны.