Многомодульные приложения

Реализация встроенного 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 в многомодульных приложениях, необходимо придерживаться следующих правил:

  1. использовать соединение по умолчанию. Все остальные соединения локальны;

  2. все глобальные переменные основного языка желательно описывать в отдельном модуле основного языка в секции описаний переменных основного языка;

  3. модули, в которых используются эти переменные, должны содержать секцию описаний переменных основного языка, где перечислены глобальные переменные с модификатором extern;

  4. предложения SQL, курсоры и другие переменные встроенного SQL должны использоваться в том же модуле, где они явно или неявно декларированы (например, путем операции PREPARE). Эти переменные всегда локальны.