带有 IF 语句的交易
Transactions with IF statements
我正在尝试创建一个交易来检查客户是否存在,如果不存在,则插入客户。然后在记录引用此客户的航班预订中更新:
BEGIN;
IF NOT EXISTS (SELECT CustomerID FROM LeadCustomer WHERE CustomerID = 20006)
INSERT INTO LeadCustomer VAlUES(20006, 'Tom', 'Mann', '08, Lilac Street, Oxford',
'tomisawesome@gmail.com');
ROLLBACK;
UPDATE flightBooking Set NumSeats + 2, TotalCost + 100 WHERE EXISTS (CustomerID = 20006);
COMMIT;
END;
问题是它不喜欢'IF'。为什么是这样?我该如何解决这个问题?
非常感谢,
卡勒姆
您没有正确使用 IF
语句。它需要条件后的 THEN
关键字,并且应该以 END IF
结束。
此外,您的 UPDATE
语句的语法无效 SQL。
最后,我没有看到 INSERT
之后的 ROLLBACK
的意图,所以我删除了它 - commit
命令需要从代码块中删除(pl/pgsql 不支持事务)。
考虑:
DO $$
BEGIN
IF NOT EXISTS (SELECT CustomerID FROM LeadCustomer WHERE CustomerID = 20006) THEN
INSERT INTO LeadCustomer
VAlUES(20006, 'Tom', 'Mann', '08, Lilac Street, Oxford', 'tomisawesome@gmail.com');
END IF;
UPDATE flightBooking
SET NumSeats = NumSeats + 2, TotalCost = TotalCost + 100
WHERE CustomerID = 20006;
END;
$$
请注意,您需要将代码包装在 DO
块中。
我正在尝试创建一个交易来检查客户是否存在,如果不存在,则插入客户。然后在记录引用此客户的航班预订中更新:
BEGIN;
IF NOT EXISTS (SELECT CustomerID FROM LeadCustomer WHERE CustomerID = 20006)
INSERT INTO LeadCustomer VAlUES(20006, 'Tom', 'Mann', '08, Lilac Street, Oxford',
'tomisawesome@gmail.com');
ROLLBACK;
UPDATE flightBooking Set NumSeats + 2, TotalCost + 100 WHERE EXISTS (CustomerID = 20006);
COMMIT;
END;
问题是它不喜欢'IF'。为什么是这样?我该如何解决这个问题? 非常感谢, 卡勒姆
您没有正确使用 IF
语句。它需要条件后的 THEN
关键字,并且应该以 END IF
结束。
此外,您的 UPDATE
语句的语法无效 SQL。
最后,我没有看到 INSERT
之后的 ROLLBACK
的意图,所以我删除了它 - commit
命令需要从代码块中删除(pl/pgsql 不支持事务)。
考虑:
DO $$
BEGIN
IF NOT EXISTS (SELECT CustomerID FROM LeadCustomer WHERE CustomerID = 20006) THEN
INSERT INTO LeadCustomer
VAlUES(20006, 'Tom', 'Mann', '08, Lilac Street, Oxford', 'tomisawesome@gmail.com');
END IF;
UPDATE flightBooking
SET NumSeats = NumSeats + 2, TotalCost = TotalCost + 100
WHERE CustomerID = 20006;
END;
$$
请注意,您需要将代码包装在 DO
块中。