Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / разъясните механизм транзакций / 11 сообщений из 11, страница 1 из 1
01.04.2006, 13:30
    #33639033
Kisian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
Вопрос.
У меня есть ХП. Вот она.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE OR REPLACE FUNCTION "public"."check_and_delete_bank" (integer) RETURNS varchar AS'
DECLARE
    Name_Firm Varchar;
    Kod_Banka Integer;
begin
     kod_banka:=$1;
     SELECT Name_kratko INTO Name_firm FROM Firms WHERE id_schet=(SELECT id_schet FROM schet_firms WHERE id_banka=kod_banka);
     if FOUND then
          return Name_Firm;
     else
          SELECT Name_kratko INTO Name_firm FROM Klient WHERE id_scheta=(SELECT id_scheta FROM scheta_klienta WHERE id_banka=kod_banka);
          if FOUND then
               return Name_Firm;
          else
               SELECT Bank_Name INTO Name_Firm FROM bank WHERE id_banka=kod_banka FOR UPDATE;
               if NOT FOUND then
                  Return ''Не могу заблокировать данные'';
               else
                  DELETE FROM bank WHERE id_banka=kod_banka;
                  return ''Удалил!'';
               end if;
          end if;
     end if;
end;

'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

На сколько я понял все ХП в PostgreSQL выполняються в транзакции. И не нужно писать BEGIN...COMMIT...ROLLBACK. Но как завершаеться транзакция если я выхожу из ХП по return? И еще если мне нужно выйти из ХП с отменой действий выполненных в транзакции что я должен писать?
При добавлении строк COMMIT или ROLLBACK во время выполнении ХП выдаеться следующее сообщение: ERROR: SPI_prepare() failed on "ROLLBACK"

Будьте добры, разъясните человеку.
...
Рейтинг: 0 / 0
01.04.2006, 14:07
    #33639063
Kisian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
И вопрос следом...
Есть возможность как то передать сообщение клиентскому приложению не через return <String>?

Знаю что raise notice <String> выдает сообщение на терминал где запущен PostgreSQL. Но это я думаю не единственный способ.
...
Рейтинг: 0 / 0
01.04.2006, 16:16
    #33639156
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
автореще если мне нужно выйти из ХП с отменой действий выполненных в транзакции что я должен писать?
raise error ....
...
Рейтинг: 0 / 0
01.04.2006, 16:20
    #33639160
.Guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
KisianНо как завершаеться транзакция если я выхожу из ХП по return? И еще если мне нужно выйти из ХП с отменой действий выполненных в транзакции что я должен писать?

Выход по RETURN подтверждает транзакцию, в которой выполняется хранимая процедура.
Для отката транзакции подними исключение.
...
Рейтинг: 0 / 0
03.04.2006, 16:20
    #33641610
Kisian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
Funny_Falcon автореще если мне нужно выйти из ХП с отменой действий выполненных в транзакции что я должен писать?
raise error ....

проверял у меня выдается сообщение об ошибке при выполнении ХП, ругаеться на слово Error.
Вот так:
Код: plaintext
ERROR:  syntax error at or near "error"

Может нужно выполнить какие то установки при старте самого сервера?
...
Рейтинг: 0 / 0
03.04.2006, 18:29
    #33641960
.Guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
RAISE EXCEPTION
...
Рейтинг: 0 / 0
03.04.2006, 19:03
    #33642044
Kisian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
.GuestRAISE EXCEPTION

Да так работает. Большое спасибо.
...
Рейтинг: 0 / 0
04.04.2006, 10:14
    #33642649
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
sorry. А вообще я думал, что ты в документацию посмотришь.
...
Рейтинг: 0 / 0
11.04.2006, 14:15
    #33658401
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
Скажу сразу - работаю с Oracle, но с интересом посматриваю на PostgreSQL.

.Guest KisianНо как завершаеться транзакция если я выхожу из ХП по return? И еще если мне нужно выйти из ХП с отменой действий выполненных в транзакции что я должен писать?

Выход по RETURN подтверждает транзакцию, в которой выполняется хранимая процедура.
Для отката транзакции подними исключение.

Из этой фразы не понятно, что нужно сделать, если ХП не завершающий элемент в транзакции. Т.е. если я начал что-то делать, потом надо вызвать ХП, потом продолжить и в конце подтвердить или откатить.
В Оракле понятно - Коммит или Роллбэк в любом месте завершит транзакцию, причем ХП отработает без завершения ее. А как здесь?
...
Рейтинг: 0 / 0
11.04.2006, 14:31
    #33658462
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
pamir В Оракле понятно - Коммит или Роллбэк в любом месте завершит транзакцию, причем ХП отработает без завершения ее. А как здесь?если нет сейвпойнтов и т.п, то откатывается вся транзакция целиком. Если транзакция вызвана стейтментом (т.е. не в батче с явным объяблением), то весь стейтмент либо пройдет , либо (по пути в любом месте возникла необработанная ошибка) откатится. Если внутри такого стейтмента вызывались (каскадно или еще как) хранимки - то их ошибки или ошибка еще чего откатит всю транзакцию в т.ч. работу всех вызванных хранимок (за исключением нетранзакционных вещей - ака наваривание/изменение счетчиков). Если вызов прошел из батча, то до вызова его, батчевого коммита/роллбека транзакция не будет завершена (в функциях попросту низзя написать ни коммит, ни роллбек-а).
...
Рейтинг: 0 / 0
11.04.2006, 14:43
    #33658500
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
разъясните механизм транзакций
Понятно. Очень близко к Ораклу. очень. Перестраивать мышление почти не придется, за исключением того, что в Оракле транзакции сами стартуют после завершения очередной. Но это мелочь

Спасибо.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / разъясните механизм транзакций / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]