SQL程序错误

问题描述 投票:0回答:6

变成一个过程,让在“过程”的任何想法语法错误?

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;
sql postgresql
6个回答
2
投票

PostgreSQL没有 “CREATE PROCEDURE”。这是reported,大多数你可能需要存储过程在其他数据库可以在PostgreSQL里完成与CREATE FUNCTION


1
投票

不,你不能这样做。你想导致由SalesRep.Name聚集你的看法。什么,你想要做的是过滤那些款项。你有两个选择:

  1. 创建一个存储过程,而不是一个视图。这样,你可以有开始日期和结束日期作为滤波输入参数。
  2. 不要创建一个数据库结构可言,只是使用的查询,并有你的源代码填充参数。

编辑

所以,你改变了这个问题,现在要在PostgreSQL中创建一个存储过程。你可能想看看这个:A Basic Introduction to Postgres Stored Procedures。把你的时间来阅读它,在这个过程中获得的知识肯定会有所帮助。而且,通过它自己的方式,你可能会重新评估,并认为你并不真的需要那种功能的一个简单的查询,如这一个。祝好运。


0
投票

从视图定义之外你没有访问底层表。


0
投票

你确定你不是故意使用CREATE FUNCTION

CREATE FUNCTION performance_Report(date, date)

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;

否则,执行此查询的工作,如果你删除了这一行完全没有作为一个存储过程?


0
投票

CREATE PROCEDURE引入到PostgreSQL版本11,所以如果你使用的是较早的版本,你会得到ERROR: syntax error at or near "PROCEDURE"

© www.soinside.com 2019 - 2024. All rights reserved.