Plpgsql ERROR: missing FROM-clause entry for table when trying to insert

Plpgsql ERROR: missing FROM-clause entry for table when trying to insert

每次我尝试在 table SaleosOrderDetail 中插入内容时,我都会收到以下错误:

ERROR: missing FROM-clause entry for table "salesorderdetail" LINE 1: SELECT CustomerID FROM SalesOrderHeader WHERE SalesOrderDeta... QUERY: SELECT CustomerID FROM SalesOrderHeader WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID CONTEXT: PL/pgSQL function new_order_detail() line 6 at SQL statement

********** Error **********

ERROR: missing FROM-clause entry for table "salesorderdetail" SQL state: 42P01 Context: PL/pgSQL function new_order_detail() line 6 at SQL statement

密码是:

CREATE OR REPLACE FUNCTION new_order_detail()
RETURNS trigger AS
$BODY$
DECLARE CustID INT;
BEGIN


    SELECT CustomerID FROM SalesOrderHeader WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID INTO custID;
    UPDATE Customer SET number_of_items = number_of_items + 1 WHERE CustomerID = custID ;



END;
$BODY$ LANGUAGE plpgsql;


DROP TRIGGER IF EXISTS new_order ON SalesOrderDetail;

CREATE TRIGGER new_order
    AFTER INSERT OR UPDATE ON SalesOrderDetail
    FOR EACH ROW EXECUTE PROCEDURE new_order_detail();

尝试替换:

   SELECT CustomerID FROM SalesOrderHeader WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID INTO custID;

作者:

SELECT INTO custID CustomerID FROM SalesOrderHeader WHERE SalesOrderHeader.SalesOrderID=NEW.SalesOrderID;

您缺少 table SalesOrderDetail。可能你想要:

SELECT CustomerID 
    FROM SalesOrderHeader, SalesOrderDetail
   WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
INTO custID;

这种 JOIN 形式已过时。改用现代形式:

SELECT CustomerID 
    FROM SalesOrderHeader
         JOIN SalesOrderDetail
         ON SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
INTO custID;

因为PostgreSQL SQL不区分大小写,所以不推荐使用骆驼符号。请改用下划线字符:

错误:CustomerID,正确:custmer_id