43.10. УпÑавление ÑÑанзакÑиÑми
РпÑоÑедÑÑе, коÑоÑÐ°Ñ Ð²ÑзÑваеÑÑÑ Ð² коде веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð¸Ð»Ð¸ в анонимном блоке кода (в команде DO), можно ÑпÑавлÑÑÑ ÑÑанзакÑиÑми. ЧÑÐ¾Ð±Ñ Ð·Ð°ÑикÑиÑоваÑÑ ÑекÑÑÑÑ ÑÑанзакÑиÑ, вÑполниÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ commit, а ÑÑÐ¾Ð±Ñ Ð¾ÑкаÑиÑÑ â rollback. (ÐамеÑÑÑе, ÑÑо вÑполниÑÑ SQL-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COMMIT или ROLLBACK ÑеÑез spi_exec или подобнÑÑ ÑÑнкÑÐ¸Ñ Ð½ÐµÐ»ÑзÑ. СооÑвеÑÑÑвÑÑÑие опеÑаÑии могÑÑ Ð²ÑполнÑÑÑÑÑ ÑолÑко даннÑми ÑÑнкÑиÑми.) ÐоÑле завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑанзакÑии ÑледÑÑÑÐ°Ñ Ð½Ð°ÑинаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, оÑделÑной ÑÑнкÑии Ð´Ð»Ñ ÑÑого неÑ.
ÐÑимеÑ:
CREATE PROCEDURE transaction_test1()
LANGUAGE pltcl
AS $$
for {set i 0} {$i < 10} {incr i} {
spi_exec "INSERT INTO test1 (a) VALUES ($i)"
if {$i % 2 == 0} {
commit
} else {
rollback
}
}
$$;
CALL transaction_test1();ТÑанзакÑии не могÑÑ Ð·Ð°Ð²ÐµÑÑаÑÑÑÑ, когда имееÑÑÑ Ð¾ÑкÑÑÑÐ°Ñ ÑÐ²Ð½Ð°Ñ Ð¿Ð¾Ð´ÑÑанзакÑиÑ.