尽管引用了表,但列名仍然不明确

时间:2020-05-18 16:04:59

标签: sql postgresql

尽管在一个非常相似的功能中没有这个问题,但是我似乎在这个问题中遇到了这个问题,并且在这个特定的上下文中找不到关于该问题的任何建议(我可以理解)。如果有人可以提供任何建议或参考,将不胜感激。

错误:“列引用“ customerid”不明确”

CREATE OR REPLACE FUNCTION update_FlightBooking(INTEGER, INTEGER, INTEGER, INTEGER, CHAR(1), TIMESTAMP, DECIMAL)
RETURNS TABLE
(
  BookingID INTEGER, 
  CustomerID INTEGER,
  FlightID INTEGER, 
  NumSeats INTEGER,
  Status CHAR(1),
  BookingTime TIMESTAMP,
  TotalCost DECIMAL
) AS $$

BEGIN
  IF NOT EXISTS (SELECT CustomerID FROM FlightBooking WHERE FlightBooking.CustomerID = $2) THEN
    INSERT INTO FlightBooking VAlUES($1, $2, $3, $4, $5, $6, $7);

  ELSE
    UPDATE FlightBooking AS fb
    SET NumSeats = NumSeats + $4, TotalCost = TotalCost + $7
    WHERE fb.CustomerID = $2;
  END IF;

  IF NOT EXISTS (SELECT CustomerID FROM LeadCustomer WHERE LeadCustomer.CustomerID = $2) THEN
    ROLLBACK;
  END IF;

  IF (check_Seats($3) < 0) THEN 
    ROLLBACK; 
  END IF;

  RETURN QUERY
    SELECT fb.BookingID, fb.CustomerID, fb.FlightID, fb.NumSeats, fb.Status, fb.BookingTime, fb.TotalCost 
    FROM FlightBooking AS fb WHERE fb.CustomerID = $1;
END;
$$
LANGUAGE plpgsql;

1 个答案:

答案 0 :(得分:2)

https://www.postgresql.org/docs/9.5/plpgsql-implementation.html

默认情况下,如果SQL语句中的名称,PL / pgSQL将报告错误 可以引用变量或表列。您可以解决这样的问题 通过重命名变量或列,或通过限定 模棱两可的引用,或通过告诉PL / pgSQL对哪个解释 喜欢。

这适用于customerId中的IF NOT EXISTS (SELECT CustomerID ...