I need to convert my Informix function to PostgreSQL. Problem is that I know PostgreSQL doesn't allow to call BEGIN WORK and COMMIT in function so I don't know how to handle my exceptions and rollback that way.
Function that I want to convert looks like this:
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;