SQL过程错误
改成程序,在“程序”处出现语法错误有什么想法吗SQL过程错误,sql,postgresql,Sql,Postgresql,改成程序,在“程序”处出现语法错误有什么想法吗 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, Or
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;
在视图定义之外,您无权访问基础表 不,你不能那样做。您希望视图按SalesRep.Name生成聚合。您要做的是过滤这些总和。您有两个选择:
因此,您更改了问题,现在希望在PostgreSql中创建一个存储过程。您可能需要查看以下内容:。花点时间阅读,在这个过程中获得的知识肯定会有所帮助。而且,在您完成它的过程中,您可能会重新评估,并认为对于这样一个简单的查询,您并不真正需要这种功能。祝你好运。PostgreSQL没有“创建过程”。您在其他数据库中可能需要的大部分存储过程都可以在PostgreSQL中完成。您确定不打算使用:
您有
和ShopOrder.OrderDate在@startDate和endDate之间
不应该是和ShopOrder.OrderDate在@startDate和@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
是在版本11中引入PostgreSQL的,因此如果您使用的是早期版本,您将在“procedure”处或附近收到错误:语法错误。当然。。是否仍有使用视图进行此查询的方法?您可以尝试将OrderDate
添加到视图的SELECT
。但是它会改变结果集-您还需要按OrderDate
分组,这可能不是您想要的。。。另外,与正常的相比,它会降低性能,我以前尝试过这个方法,但它并没有像你说的那样给我期望的结果,不管怎样,谢谢!这是什么数据库?如果是SQL Server,您可能需要使用@startDate DATETIME而不是@startDate DATE.pgAdmin,即使没有输入参数,语法错误仍然存在。此语法与PostgreSQL无关,甚至您希望用于过程的语言也丢失了。打开手册,开始学习如何在PostgreSQL中编写存储过程(即函数)。我编辑了答案,以指导您了解如何在PostgreSQL中创建存储过程。希望有帮助。@user195257你能做到吗?让我们知道
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;