Мне нужно преобразовать мою функцию Informix в PostgreSQL. Проблема в том, что я знаю, что PostgreSQL не позволяет вызывать функцию BEGIN WORK и COMMIT, поэтому я не знаю, как обращаться с моими исключениями и откатом таким образом.Informix to PostgreSQL - Функция транзакции
Функция, которую я хочу, чтобы преобразовать выглядит так:
CREATE PROCEDURE buyTicket(pFlightId LIKE transaction.flightId, pAmount LIKE transaction.amount)
DEFINE sqle, isame INTEGER;
DEFINE errdata CHAR(80);
ON EXCEPTION SET sqle, isame, errdata
ROLLBACK WORK;
IF sqle = -530 AND errdata LIKE '%chkfreespots%' THEN
RAISE EXCEPTION -746, 0, 'Not enough free spots';
ELSE
RAISE EXCEPTION sqle, isame, errdata;
END IF
END EXCEPTION;
BEGIN WORK;
INSERT INTO transaction VALUES (0, pFlightId, pAmount);
UPDATE tickets SET freeSpots= freeSpots - pAmount
WHERE flightId = pFlightId;
COMMIT WORK;
END PROCEDURE;
Вы можете разместить свой первоначальный запрос, который вы Вана преобразовать в function.And кто вам сказал, что вы не можете обрабатывать транзакции внутри функции ? – Houari
Посмотрите [этот ответ] (http://stackoverflow.com/a/24523639/1216680) как отправная точка относительно сделка внутри функция. – Houari
Я хочу преобразовать эти 2 запроса (INSERT и UPDATE), там есть полностью функциональная функция в SQL, которую я хочу преобразовать в PostgreSQL. Когда я хочу выполнить BEGIN WORK в PostgreSQL внутри функции, я получаю сообщение об ошибке, которое вы не можете использовать внутри функции. – TranceFusion