powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / FUNCTION + SAVEPOINT ???
2 сообщений из 2, страница 1 из 1
FUNCTION + SAVEPOINT ???
    #39500924
Фотография MMM_Corp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток,

Код: plsql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
CREATE OR REPLACE FUNCTION public.buy (
  cat_id integer,
  icount integer,
  email varchar
)
RETURNS TABLE (
  error_code integer,
  uid uuid
) AS
$body$
DECLARE
  UID_value uuid:=md5(random()::text || clock_timestamp()::text);
  upcopunt integer;
  my_basket_id integer;
  integer_var integer;
  error_code integer = 0;
BEGIN
SAVEPOINT my_savepoint;

-- создать покупку в корзине и вернуть ее -+id
insert
into shop_basket(email, uid, datetime)
values (email, UID_value, now())
RETURNING id INTO my_basket_id;

-- витащить товар в достаточном количестве
UPDATE
	shop_goods s
SET
	basket_id=my_basket_id
FROM
(
select
      s.id,
      s.basket_id
  from
      shop_goods as s
  where
      	s.cats_id=cat_id
 	and s.basket_id is NULL
  order by s.datetime
  limit icount
) AS s2
where s.id=s2.id;

-- не хватает товара
GET DIAGNOSTICS integer_var = ROW_COUNT;
IF integer_var <> icount THEN
	BEGIN
	error_code=-2;
    ROLLBACK TO my_savepoint;
    END;
END IF;
COMMIT;

RETURN QUERY select error_code, UID_value;

END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
COST 100 ROWS 1;



так не принимает,
слонь 9.6.3ОШИБКА: в PL/pgSQL нельзя начинать/заканчивать транзакции
HINT: Используйте блок BEGIN с предложением EXCEPTION.
CONTEXT: функция PL/pgSQL buy(integer,integer,character varying), строка 9, оператор SQL-оператор

как обыграть ситуйовину непонятную?
по сути мне нужна классическая транзакция внутри "все_или_ничего"

Спасибо!
...
Рейтинг: 0 / 0
FUNCTION + SAVEPOINT ???
    #39500933
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / FUNCTION + SAVEPOINT ???
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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