SQL过程错误

时间:2011-04-05 22:15:05

标签: sql postgresql

更改为一个过程,在'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;

6 个答案:

答案 0 :(得分:2)

PostgreSQL没有“CREATE PROCEDURE”。 reported你可能需要在其他数据库中存储过程的大部分内容都可以在CREATE FUNCTION的PostgreSQL中完成。

答案 1 :(得分:1)

不,你不能这样做。您希望视图通过SalesRep.Name生成聚合。你想要做的是过滤那些SUM。您有两种选择:

  1. 创建存储过程而不是视图。这样,您可以将开始日期和结束日期作为过滤的输入参数。
  2. 根本不要创建数据库结构,只需使用查询并让源代码填充参数。
  3. 修改

    因此,您更改了问题,现在要在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"