尽管在一个非常相似的功能中没有这个问题,但是我似乎在这个问题中遇到了这个问题,并且在这个特定的上下文中找不到关于该问题的任何建议(我可以理解)。如果有人可以提供任何建议或参考,将不胜感激。
错误:“列引用“ 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;
答案 0 :(得分:2)
https://www.postgresql.org/docs/9.5/plpgsql-implementation.html说
默认情况下,如果SQL语句中的名称,PL / pgSQL将报告错误 可以引用变量或表列。您可以解决这样的问题 通过重命名变量或列,或通过限定 模棱两可的引用,或通过告诉PL / pgSQL对哪个解释 喜欢。
这适用于customerId
中的IF NOT EXISTS (SELECT CustomerID ...