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生成聚合。您要做的是过滤这些总和。您有两个选择:

  • 创建存储过程而不是视图。这样,您就可以将开始日期和结束日期作为过滤的输入参数
  • 根本不创建DB结构,只需使用查询并让源代码填充参数即可
  • 编辑


    因此,您更改了问题,现在希望在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;