更改为一个过程,在'PROCEDURE'中获得语法错误的任何想法?
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;
答案 0 :(得分:2)
PostgreSQL没有“CREATE PROCEDURE”。 reported你可能需要在其他数据库中存储过程的大部分内容都可以在CREATE FUNCTION的PostgreSQL中完成。
答案 1 :(得分:1)
不,你不能这样做。您希望视图通过SalesRep.Name生成聚合。你想要做的是过滤那些SUM。您有两种选择:
修改强>
因此,您更改了问题,现在要在PostgreSql中创建存储过程。您可能想看看这个:A Basic Introduction to Postgres Stored Procedures。花点时间阅读它,在这个过程中获得的知识肯定会有所帮助。并且,在您通过它的过程中,您可能会重新评估并认为您并不真正需要这种功能来进行简单的查询,例如此类查询。祝你好运。
答案 2 :(得分:0)
从视图定义的外部,您无权访问基础表。
答案 3 :(得分:0)
您确定不想使用CREATE FUNCTION
:
CREATE FUNCTION performance_Report(date, date)
答案 4 :(得分:0)
您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;
如果您完全删除该行而不是存储过程,则此查询是否有效?
答案 5 :(得分:0)
CREATE PROCEDURE
是在版本11中引入PostgreSQL的,因此,如果您使用的是早期版本,则将获得ERROR: syntax error at or near "PROCEDURE"