我需要将Informix函数转换为PostgreSQL。问题是我知道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; 发布于 2015-05-24 13:21:22
在阅读了你的评论后,我终于解决了这个问题。下面是与我上面发布的Informix相同的PostgreSQL代码:
CREATE OR REPLACE FUNCTION buyTicket(pFlightId INT, pAmount INT)
RETURNS VOID AS $$
BEGIN
INSERT INTO transaction(flightId,amount) VALUES (pFlightId, pAmount);
UPDATE tickets SET freeSpots = freeSpots - pAmount
WHERE flightId = pFlightId;
EXCEPTION
WHEN others THEN
IF sqlerrm LIKE '%chkfreespots%' THEN
RAISE EXCEPTION 'Not enough free spots';
ELSE
RAISE;
END IF;
END;
$$ LANGUAGE plpgsql;https://stackoverflow.com/questions/30421816
复制相似问题