带有 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 块中。