35.1. ÐонÑепÑÐ¸Ñ #
ÐÑогÑамма Ñо вÑÑÑаиваемÑм SQL ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· кода, напиÑанного на обÑÑном ÑзÑке пÑогÑаммиÑованиÑ, в данном ÑлÑÑае С, дополненного командами SQL в ÑпеÑиалÑно обознаÑеннÑÑ
ÑекÑиÑÑ
. ЧÑÐ¾Ð±Ñ ÑобÑаÑÑ Ð¿ÑогÑаммÑ, ÐµÑ Ð¸ÑÑ
однÑй код (*.pgc) ÑнаÑала нÑжно пÑопÑÑÑиÑÑ ÑеÑез пÑепÑоÑеÑÑÐ¾Ñ Ð²ÑÑÑаиваемого SQL, коÑоÑÑй пÑевÑаÑÐ¸Ñ ÐµÑ Ð² обÑÑнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° C (*.c), воÑпÑинимаемÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑоÑом C. (ÐодÑобнее компилÑÑÐ¸Ñ Ð¸ компоновка опиÑÑваеÑÑÑ Ð² Разделе 35.10). ÐÑеобÑазованнÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ECPG вÑзÑваÑÑ ÑÑнкÑии в библиоÑеке libpq ÑеÑез библиоÑÐµÐºÑ Ð²ÑÑÑаиваемого SQL (ecpglib) и взаимодейÑÑвÑÑÑ Ñ ÑеÑвеÑом Postgres Pro по обÑÑÐ½Ð¾Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñ-ÑеÑвеÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑоколÑ.
ÐÑÑÑаиваемÑй SQL Ð¸Ð¼ÐµÐµÑ ÑÑд пÑеимÑÑеÑÑв по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð´ÑÑгими меÑодами вÑзова команд SQL из кода C. Ðо-пеÑвÑÑ , ÑÑÐ¾Ñ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ беÑÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð·Ð°Ð±Ð¾ÑÑ Ð¾ пеÑедаÑе инÑоÑмаÑии ÑеÑез пеÑеменнÑе в пÑогÑамме на C. Ðо-вÑоÑÑÑ , код SQL в пÑогÑамме пÑовеÑÑеÑÑÑ Ð½Ð° ÑинÑакÑиÑеÑкÑÑ Ð¿ÑавилÑноÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÑбоÑки. Ð-ÑÑеÑÑÐ¸Ñ , вÑÑÑаиваемÑй SQL в C опиÑан ÑÑандаÑÑом SQL и поддеÑживаеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ð¼Ð¸ дÑÑгими СУÐÐ SQL. РеализаÑÐ¸Ñ Ð² Postgres Pro ÑазÑабоÑана Ñак, ÑÑÐ¾Ð±Ñ Ð¼Ð°ÐºÑималÑно ÑооÑвеÑÑÑвоваÑÑ ÑÑÐ¾Ð¼Ñ ÑÑандаÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑÑно доÑÑаÑоÑно легко поÑÑиÑоваÑÑ Ð² Postgres Pro пÑогÑÐ°Ð¼Ð¼Ñ Ñ Ð²ÑÑÑаиваемÑм SQL, напиÑаннÑе Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð¡Ð£ÐÐ.
Ðак Ñже Ñказано, пÑогÑаммÑ, напиÑаннÑе Ð´Ð»Ñ Ð¸Ð½ÑеÑÑейÑа вÑÑÑаиваемого SQL, пÑедÑÑавлÑÑÑ Ñобой обÑÑнÑе пÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° C Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ñм ÑпеÑиалÑнÑм кодом, коÑоÑÑй вÑполнÑÐµÑ Ð´ÐµÐ¹ÑÑвиÑ, ÑвÑзаннÑе Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ . ÐÑÐ¾Ñ ÑпеÑиалÑнÑй код вÑегда Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑÑÑ ÑоÑмÑ:
EXEC SQL ...;
Такие опеÑаÑоÑÑ ÑинÑакÑиÑеÑки занимаÑÑ Ð¼ÐµÑÑо опеÑаÑоÑов C. РзавиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного опеÑаÑоÑа, они могÑÑ ÑазмеÑаÑÑÑÑ Ð½Ð° глобалÑном ÑÑовне или внÑÑÑи ÑÑнкÑии.
ÐÑÑÑаиваемÑе опеÑаÑоÑÑ SQL ÑледÑÑÑ Ð¿Ñавилам ÑÑÑÑа ÑегиÑÑÑа, пÑинÑÑÑм в обÑÑном коде SQL, а не в C. Ðни Ñакже допÑÑкаÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе комменÑаÑии в ÑÑиле C, ÑазÑеÑÑннÑе ÑÑандаÑÑом SQL. Ðднако оÑÑалÑÐ½Ð°Ñ ÑаÑÑÑ Ð¿ÑогÑаммÑ, напиÑÐ°Ð½Ð½Ð°Ñ Ð½Ð° C, в ÑооÑвеÑÑÑвии Ñо ÑÑандаÑÑом C ÑодеÑжаÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе комменÑаÑии не можеÑ. Также пÑавила SQL, а не C, дейÑÑвÑÑÑ Ð¿Ñи ÑазбоÑе ÑÑÑок в кавÑÑкаÑ
и иденÑиÑикаÑоÑов во вÑÑÑаиваемÑÑ
опеÑаÑоÑаÑ
SQL. (См. ÐодÑаздел 4.1.2.1 и ÐодÑаздел 4.1.1 ÑооÑвеÑÑÑвенно. ÐбÑаÑиÑе внимание: ECPG пÑедполагаеÑ, ÑÑо standard_conforming_strings Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение on). ÐонеÑно, ÑаÑÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° C ÑледÑÐµÑ Ð¿Ñавилам ÑиÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ C.
ÐÑе вÑÑÑаиваемÑе SQL-опеÑаÑоÑÑ ÑаÑÑмаÑÑиваÑÑÑÑ Ð² ÑледÑÑÑÐ¸Ñ ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ .