PREPARE
PREPARE â подгоÑовиÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ðº вÑполнениÑ
СинÑакÑиÑ
PREPAREподгоÑовленнÑй_опеÑаÑоÑFROMÑÑÑока
ÐпиÑание
Ðоманда PREPARE подгоÑÐ°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ðº вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкий опеÑаÑоÑ, задаваемÑй в виде ÑÑÑоки. Ðна оÑлиÑаеÑÑÑ Ð¾Ñ Ð¾Ð±ÑÑного SQL-опеÑаÑоÑа PREPARE, коÑоÑÑй Ñакже можно иÑполÑзоваÑÑ Ð²Ð¾ вÑÑÑаиваемÑÑ
командаÑ
. ÐÐ»Ñ Ð¾Ð±Ð¾Ð¸Ñ
Ñипов подгоÑовленнÑÑ
опеÑаÑоÑов пÑименÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° EXECUTE.
ÐаÑамеÑÑÑ
подгоÑовленнÑй_опеÑаÑоÑÐденÑиÑикаÑÐ¾Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñовленного запÑоÑа.
ÑÑÑокаСÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа C или пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑÐµÐ´Ñ C, ÑодеÑжаÑÐ°Ñ Ð¾Ð´Ð¸Ð½ из подгоÑавливаемÑÑ Ð¾Ð¿ÐµÑаÑоÑов: SELECT, INSERT, UPDATE или DELETE. ÐаÑамеÑÑÑ, знаÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑÑÑ Ð±ÑдÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¿Ñи вÑполнении, обознаÑаÑÑÑÑ Ð²Ð¾Ð¿ÑоÑиÑелÑнÑми знаками (
?).
ÐÑимеÑаниÑ
ÐбÑÑно в каÑеÑÑве ÑÑÑоки задаÑÑÑÑ ÑÑÑлка на пеÑеменнÑÑ, ÑодеÑжаÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки ÑоздаваемÑй SQL-опеÑаÑоÑ. ÐÑполÑзоваÑÑ Ð·Ð´ÐµÑÑ ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑÑ Ð½Ðµ оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾; Ñ Ñем же ÑÑпеÑ
ом можно напиÑаÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно SQL-опеÑаÑÐ¾Ñ PREPARE.
ÐÑли Ð²Ñ Ð²ÑÑ Ð¶Ðµ иÑполÑзÑеÑе ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑÑ, имейÑе в видÑ, ÑÑо вклÑÑаемÑе в SQL-опеÑаÑÐ¾Ñ Ð´Ð²Ð¾Ð¹Ð½Ñе кавÑÑки нÑжно запиÑÑваÑÑ Ð² виде воÑÑмеÑиÑной ÑпеÑпоÑледоваÑелÑноÑÑи (\042), а не в виде \", как пÑинÑÑо в C. ÐÑо обÑÑÑнÑеÑÑÑ Ñем, ÑÑо Ð´Ð°Ð½Ð½Ð°Ñ ÑÑÑока наÑ
одиÑÑÑ Ð²Ð½ÑÑÑи блока EXEC SQL, поÑÑÐ¾Ð¼Ñ Ð»ÐµÐºÑиÑеÑкий анализаÑÐ¾Ñ ECPG ÑазбиÑÐ°ÐµÑ ÐµÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð¿Ñавилами SQL, а не C. СодеÑжаÑиеÑÑ Ð² ÑÑой ÑÑÑоке ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ Ð±ÑдÑÑ Ð¾Ð±ÑабоÑÐ°Ð½Ñ Ð¿Ð¾Ð·Ð¶Ðµ, по пÑавилам C, но поÑледоваÑелÑноÑÑÑ \" ÑÑÐ°Ð·Ñ Ð²ÑÐ·Ð¾Ð²ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ ÑинÑакÑиÑа, Ñак как она бÑÐ´ÐµÑ Ð²Ð¾ÑпÑинÑÑа как завеÑÑаÑÑÐ°Ñ ÑÑÑокÑ.
ÐÑимеÑÑ
char *stmt = "SELECT * FROM test1 WHERE a = ? AND b = ?"; EXEC SQL ALLOCATE DESCRIPTOR outdesc; EXEC SQL PREPARE foo FROM :stmt; EXEC SQL EXECUTE foo USING SQL DESCRIPTOR indesc INTO SQL DESCRIPTOR outdesc;
СовмеÑÑимоÑÑÑ
Ðоманда PREPARE опиÑана в ÑÑандаÑÑе SQL.