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
每次我尝试在 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