34.9. ÐиÑекÑÐ¸Ð²Ñ Ð¿ÑепÑоÑеÑÑоÑа
ÐÑепÑоÑеÑÑÐ¾Ñ ecpg поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑд диÑекÑив, коÑоÑÑе позволÑÑÑ ÑпÑавлÑÑÑ ÑазбоÑом и обÑабоÑкой иÑÑ
однÑÑ
Ñайлов.
34.9.1. ÐклÑÑение Ñайлов
ÐÐ»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑнего Ñайла в пÑогÑÐ°Ð¼Ð¼Ñ Ñо вÑÑÑаиваемÑм SQL, иÑполÑзÑеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑиÑ:
EXEC SQL INCLUDEимÑ_Ñайла; EXEC SQL INCLUDE <имÑ_Ñайла>; EXEC SQL INCLUDE "имÑ_Ñайла";
ÐÑÑÑеÑив ÑакÑÑ Ð´Ð¸ÑекÑивÑ, пÑепÑоÑеÑÑÐ¾Ñ Ð²ÑÑÑаиваемого SQL бÑÐ´ÐµÑ Ð¸ÑкаÑÑ Ñайл , обÑабаÑÑваÑÑ ÐµÐ³Ð¾ и вклÑÑаÑÑ Ð² вÑÑ
одной код C. Ð ÑезÑлÑÑаÑе вÑÑÑаиваемÑе SQL-опеÑаÑоÑÑ Ð²Ð¾ вклÑÑÑнном Ñаким обÑазом Ñайле бÑдÑÑ Ð¾Ð±ÑабоÑÐ°Ð½Ñ ÐºÐ¾ÑÑекÑно.имÑ_Ñайла.h
ÐÑепÑоÑеÑÑÐ¾Ñ ecpg бÑÐ´ÐµÑ Ð¸ÑкаÑÑ ÑказаннÑй Ñайл в неÑколÑкиÑ
каÑалогаÑ
в ÑледÑÑÑем поÑÑдке:
- ÑекÑÑий каÑалог
/usr/local/include- каÑалог вклÑÑаемÑÑ
Ñайлов Postgres Pro, опÑеделÑннÑй во вÑÐµÐ¼Ñ ÑбоÑки (напÑимеÑ,
/usr/local/pgsql/include) /usr/include
Ðо когда иÑполÑзÑеÑÑÑ ÑоÑма EXEC SQL INCLUDE ", пÑоÑмаÑÑиваеÑÑÑ ÑолÑко ÑекÑÑий каÑалог.имÑ_Ñайла"
Ркаждом каÑалоге пÑепÑоÑеÑÑÐ¾Ñ Ð±ÑÐ´ÐµÑ ÑнаÑала иÑкаÑÑ Ñайл Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм именем, а еÑли не обнаÑÑÐ¶Ð¸Ñ ÐµÐ³Ð¾, попÑÑаеÑÑÑ Ð½Ð°Ð¹Ñи Ñайл Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ñм ÑаÑÑиÑением .h (еÑли ÑолÑко заданное Ð¸Ð¼Ñ Ñайла Ñже не ÑодеÑÐ¶Ð¸Ñ ÑÑо ÑаÑÑиÑение).
ÐамеÑÑÑе, ÑÑо команда EXEC SQL INCLUDE не ÑавнознаÑна вклÑÑениÑ:
#include <имÑ_Ñайла.h> Ñак как во вÑоÑом ÑлÑÑае вклÑÑаемÑй Ñайл не пÑоÑ
Ð¾Ð´Ð¸Ñ ÑеÑез пÑепÑоÑеÑÑÐ¾Ñ SQL-команд. ÐÑÑеÑÑвенно, диÑекÑÐ¸Ð²Ñ C #include можно по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿ÑименÑÑÑ Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð´ÑÑгиÑ
заголовоÑнÑÑ
Ñайлов.
ÐÑимеÑание
ÐÐ¼Ñ Ð²ÐºÐ»ÑÑаемого Ñайла ÑÑвÑÑвиÑелÑно к ÑегиÑÑÑÑ, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо оÑÑалÑÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° EXEC SQL INCLUDE подÑинÑеÑÑÑ Ð¾Ð±ÑÑнÑм пÑавилам ÑÑвÑÑвиÑелÑноÑÑи к ÑегиÑÑÑÑ SQL.
34.9.2. ÐиÑекÑÐ¸Ð²Ñ define и undef
Ðо вÑÑÑаиваемом SQL еÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑиÑ, Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ Ð´Ð¸ÑекÑиве #define, извеÑÑной в C:
EXEC SQL DEFINEимÑ; EXEC SQL DEFINEимÑзнаÑение;
ÐÑполÑзÑÑ ÐµÑ, можно опÑеделиÑÑ Ð¸Ð¼Ñ:
EXEC SQL DEFINE HAVE_FEATURE;
Ð Ñакже можно опÑеделиÑÑ ÐºÐ¾Ð½ÑÑанÑÑ:
EXEC SQL DEFINE MYNUMBER 12; EXEC SQL DEFINE MYSTRING 'abc';
УдалиÑÑ Ð¿ÑедÑдÑÑее опÑеделение позволÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° undef:
EXEC SQL UNDEF MYNUMBER;
РазÑмееÑÑÑ, в пÑогÑамме Ñо вÑÑÑаиваемÑм SQL можно пÑодолжаÑÑ Ð¸ÑполÑзоваÑÑ Ð²ÐµÑÑии #define и #undef ÑзÑка C. ÐÑлиÑие ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, когда вÑÑиÑлÑÑÑÑÑ Ð¾Ð¿ÑеделÑемÑе знаÑениÑ. Ðогда пÑименÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° EXEC SQL DEFINE, вÑÑиÑлÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ подÑÑавлÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑепÑоÑеÑÑÐ¾Ñ ecpg. ÐапÑимеÑ, еÑли напиÑаÑÑ:
EXEC SQL DEFINE MYNUMBER 12; ... EXEC SQL UPDATE Tbl SET col = MYNUMBER;
подÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð²ÑÐ¿Ð¾Ð»Ð½Ð¸Ñ ecpg и компилÑÑÐ¾Ñ C никогда не ÑÐ²Ð¸Ð´Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ или иденÑиÑикаÑоÑа MYNUMBER. ÐамеÑÑÑе, ÑÑо Ñ Ð´ÑÑгой ÑÑоÑÐ¾Ð½Ñ #define не подÑ
Ð¾Ð´Ð¸Ñ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑанÑÑ, коÑоÑÑÑ Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð²Ð¾ вÑÑÑаиваемом SQL, Ñак как пÑепÑоÑеÑÑÐ¾Ñ Ð²ÑÑÑаиваемого SQL не ÑÐ¼Ð¾Ð¶ÐµÑ ÑвидеÑÑ ÑÑо опÑеделение.
ÐÑли в командной ÑÑÑоке пÑепÑоÑеÑÑоÑа ecpg Ñказано неÑколÑко вÑ
однÑÑ
Ñайлов, EXEC SQL DEFINE и EXEC SQL UNDEF не влиÑÑÑ Ð½Ð° ниÑ
: каждÑй Ñайл наÑинаеÑÑÑ ÑолÑко Ñ Ñимволов, опÑеделÑннÑÑ
клÑÑами -D в командной ÑÑÑоке.
34.9.3. ÐиÑекÑÐ¸Ð²Ñ ifdef, ifndef, else, elif и endif
ÐÐ»Ñ ÑÑловной компилÑÑии блоков кода можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑказаниÑ:
EXEC SQL ifdefимÑ;ÐÑовеÑÑеÑ
имÑи обÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ð¾ÑледÑÑÑие ÑÑÑоки, еÑлиимÑбÑло опÑеделено командойEXEC SQL define.имÑEXEC SQL ifndefимÑ;ÐÑовеÑÑеÑ
имÑи обÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ð¾ÑледÑÑÑие ÑÑÑоки, еÑлиимÑне бÑло опÑеделено командойEXEC SQL define.имÑEXEC SQL else;ÐаÑÐ¸Ð½Ð°ÐµÑ Ð°Ð»ÑÑеÑнаÑивнÑÑ Ð²ÐµÑÐ²Ñ ÑÑловиÑ, оÑкÑÑÑого командой
EXEC SQL ifdefилиимÑEXEC SQL ifndef.имÑEXEC SQL elifимÑ;ÐÑовеÑÑеÑ
имÑи наÑÐ¸Ð½Ð°ÐµÑ Ð°Ð»ÑÑеÑнаÑивнÑÑ Ð²ÐµÑÐ²Ñ ÑÑловиÑ, еÑлиимÑбÑло опÑеделено командойEXEC SQL define.имÑEXEC SQL endif;ÐавеÑÑÐ°ÐµÑ Ð²ÐµÑÐ²Ñ ÑÑловиÑ.
ÐÑимеÑ:
EXEC SQL ifndef TZVAR; EXEC SQL SET TIMEZONE TO 'GMT'; EXEC SQL elif TZNAME; EXEC SQL SET TIMEZONE TO TZNAME; EXEC SQL else; EXEC SQL SET TIMEZONE TO TZVAR; EXEC SQL endif;