EXECUTE IMMEDIATE
EXECUTE IMMEDIATE â динамиÑеÑки подгоÑовиÑÑ Ð¸ вÑполниÑÑ Ð¾Ð¿ÐµÑаÑоÑ
СинÑакÑиÑ
EXECUTE IMMEDIATE ÑÑÑокаÐпиÑание
EXECUTE IMMEDIATE немедленно подгоÑÐ°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¸ вÑполнÑÐµÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки задаваемÑй SQL-опеÑаÑоÑ, не полÑÑÐ°Ñ Ð¿Ñи ÑÑом ÑÑÑоки ÑезÑлÑÑаÑа.
ÐаÑамеÑÑÑ
ÑÑÑокаСÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа или пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑÐµÐ´Ñ C, ÑодеÑжаÑÐ°Ñ SQL-опеÑаÑоÑ, коÑоÑÑй нÑжно вÑполниÑÑ.
ÐÑимеÑаниÑ
ÐбÑÑно в каÑеÑÑве ÑÑÑоки задаÑÑÑÑ ÑÑÑлка на пеÑеменнÑÑ, ÑодеÑжаÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки ÑоздаваемÑй SQL-опеÑаÑоÑ. ÐÑполÑзоваÑÑ Ð·Ð´ÐµÑÑ ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑÑ Ð½Ðµ оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾; Ñ Ñем же ÑÑпеÑ
ом можно напиÑаÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно SQL-опеÑаÑоÑ, не добавлÑÑ Ð»Ð¸ÑнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ EXECUTE IMMEDIATE.
ÐÑли Ð²Ñ Ð²ÑÑ Ð¶Ðµ иÑполÑзÑеÑе ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑÑ, имейÑе в видÑ, ÑÑо вклÑÑаемÑе в SQL-опеÑаÑÐ¾Ñ Ð´Ð²Ð¾Ð¹Ð½Ñе кавÑÑки нÑжно запиÑÑваÑÑ Ð² виде воÑÑмеÑиÑной ÑпеÑпоÑледоваÑелÑноÑÑи (\042), а не в виде \", как пÑинÑÑо в C. ÐÑо обÑÑÑнÑеÑÑÑ Ñем, ÑÑо Ð´Ð°Ð½Ð½Ð°Ñ ÑÑÑока наÑ
одиÑÑÑ Ð²Ð½ÑÑÑи блока EXEC SQL, поÑÑÐ¾Ð¼Ñ Ð»ÐµÐºÑиÑеÑкий анализаÑÐ¾Ñ ECPG ÑазбиÑÐ°ÐµÑ ÐµÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð¿Ñавилами SQL, а не C. СодеÑжаÑиеÑÑ Ð² ÑÑой ÑÑÑоке ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ Ð±ÑдÑÑ Ð¾Ð±ÑабоÑÐ°Ð½Ñ Ð¿Ð¾Ð·Ð¶Ðµ, по пÑавилам C, но поÑледоваÑелÑноÑÑÑ \" ÑÑÐ°Ð·Ñ Ð²ÑÐ·Ð¾Ð²ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ ÑинÑакÑиÑа, Ñак как она бÑÐ´ÐµÑ Ð²Ð¾ÑпÑинÑÑа как завеÑÑаÑÑÐ°Ñ ÑÑÑокÑ.
ÐÑимеÑÑ
ÐÑÐ¸Ð¼ÐµÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа INSERT Ñ Ð¿Ñименением ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ EXECUTE IMMEDIATE и пеÑеменной ÑÑÐµÐ´Ñ Ð¡ command:
sprintf(command, "INSERT INTO test (name, amount, letter) VALUES ('db: ''r1''', 1, 'f')");
EXEC SQL EXECUTE IMMEDIATE :command;СовмеÑÑимоÑÑÑ
Ðоманда EXECUTE IMMEDIATE опиÑана в ÑÑандаÑÑе SQL.