变成一个过程,让在“过程”的任何想法语法错误?
CREATE PROCEDURE performance_Report
@startDate DATE,
@endDate DATE
AS
SELECT Salesrep.Name, SUM(OrderLine.Quantity) AS Total_Sold, SUM(OrderLine.UnitSellingPrice * Orderline.Quantity) AS Total_Value
FROM SalesRep, OrderLine, ShopOrder
WHERE ShopOrder.SalesRepID = SalesRep.SalesRepID
AND OrderLine.ShopOrderID = ShopOrder.ShopOrderID
AND ShopOrder.OrderDate BETWEEN @startDate AND endDate
GROUP BY SalesRep.SalesRepID, SalesRep.Name
ORDER BY Total_Value DESC;
PostgreSQL没有 “CREATE PROCEDURE”。这是reported,大多数你可能需要存储过程在其他数据库可以在PostgreSQL里完成与CREATE FUNCTION。
不,你不能这样做。你想导致由SalesRep.Name聚集你的看法。什么,你想要做的是过滤那些款项。你有两个选择:
编辑
所以,你改变了这个问题,现在要在PostgreSQL中创建一个存储过程。你可能想看看这个:A Basic Introduction to Postgres Stored Procedures。把你的时间来阅读它,在这个过程中获得的知识肯定会有所帮助。而且,通过它自己的方式,你可能会重新评估,并认为你并不真的需要那种功能的一个简单的查询,如这一个。祝好运。
从视图定义之外你没有访问底层表。
你确定你不是故意使用CREATE FUNCTION
:
CREATE FUNCTION performance_Report(date, date)
你有没有AND ShopOrder.OrderDate BETWEEN @startDate AND endDate
应该说是AND ShopOrder.OrderDate BETWEEN @startDate AND @endDate
?
CREATE PROCEDURE performance_Report
@startDate DATE,
@endDate DATE
AS
SELECT Salesrep.Name, SUM(OrderLine.Quantity) AS Total_Sold, SUM(OrderLine.UnitSellingPrice * Orderline.Quantity) AS Total_Value
FROM SalesRep, OrderLine, ShopOrder
WHERE ShopOrder.SalesRepID = SalesRep.SalesRepID
AND OrderLine.ShopOrderID = ShopOrder.ShopOrderID
AND ShopOrder.OrderDate BETWEEN @startDate AND @endDate
GROUP BY SalesRep.SalesRepID, SalesRep.Name
ORDER BY Total_Value DESC;
否则,执行此查询的工作,如果你删除了这一行完全没有作为一个存储过程?
CREATE PROCEDURE
引入到PostgreSQL版本11,所以如果你使用的是较早的版本,你会得到ERROR: syntax error at or near "PROCEDURE"