使用IF语句进行交易

时间:2020-05-11 21:57:56

标签: sql postgresql if-statement transactions plpgsql

我正在尝试创建一个检查客户是否存在的交易,如果不存在,请插入该客户。然后更新记录参考该客户的航班预订:

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'。为什么是这样?我如何解决这个问题? 非常感谢, 卡勒姆

1 个答案:

答案 0 :(得分:2)

您没有正确使用IF语句。它期望条件后带有THEN关键字,并应以END IF终止。

此外,您的UPDATE语句的语法不是有效的SQL。

最后,在ROLLBACK之后看不到INSERT的意图,因此我将其删除了-需要将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块中。