33.10. Обработка встроенных программ SQL#
33.10. Обработка встроенных программ SQL #
Теперь, когда у вас есть представление о том, как формировать встроенные программы на языке C с использованием SQL, вам, вероятно, интересно узнать, как их компилировать. Перед компиляцией вы должны пропустить файл через встроенный препроцессор SQL C, который преобразует использованные вами SQL-запросы в специальные функциональные вызовы. После компиляции необходимо связать программу с специальной библиотекой, которая содержит необходимые функции. Эти функции извлекают информацию из аргументов, выполняют SQL-команду с использованием интерфейса libpq и помещают результат в указанные аргументы для вывода.
Препроцессорная программа называется ecpg
и включена в стандартную установку Tantor BE. Встроенные SQL-программы обычно имеют расширение .pgc
. Если у вас есть файл программы с именем prog1.pgc
, вы можете его предварительно обработать, просто вызвав:
ecpg prog1.pgc
Это создаст файл с именем prog1.c
. Если ваши входные файлы не соответствуют предложенному шаблону именования, вы можете явно указать выходной файл, используя опцию -o
.
Предварительно обработанный файл может быть скомпилирован нормально, например:
cc -c prog1.c
Сгенерированные исходные файлы на языке C включают заголовочные файлы из установки Tantor BE, поэтому, если вы установили Tantor BE в место, которое не ищется по умолчанию, необходимо добавить опцию, например, -I/usr/local/pgsql/include
, в командную строку компиляции.
Для связи с встроенной программой SQL необходимо включить библиотеку libecpg
, как показано ниже:
cc -o myprog prog1.o prog2.o ... -lecpg
Снова, вам может потребоваться добавить опцию, например
-L/usr/local/pgsql/lib
, к этой командной строке.
Вы можете использовать pg_config
или pkg-config
с именем пакета libecpg
для получения путей для вашей установки.
Если вы управляете процессом сборки крупного проекта с использованием make, может быть удобно добавить следующее неявное правило в ваши make-файлы:
ECPG = ecpg %.c: %.pgc $(ECPG) $<
Полный синтаксис команды ecpg
подробно описан в ecpg.
Библиотека ecpg по умолчанию является потокобезопасной. Однако, вам может потребоваться использовать некоторые опции командной строки для компиляции вашего клиентского кода.