繁体   English   中英

SQL过程错误

[英]SQL Procedure error

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

PostgreSQL没有“创建过程”。 报道 ,在其他数据库中可能需要的存储过程大多数都可以在PostgreSQL中使用CREATE FUNCTION完成

不,你不能那样做。 您希望您的视图根据SalesRep.Name进行汇总。 您要做的是过滤这些SUM。 您有两种选择:

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

编辑

因此,您更改了问题,现在想在PostgreSql中创建一个存储过程。 您可能需要看一下: Postgres存储过程的基本介绍 花些时间阅读它,在此过程中获得的知识肯定会有所帮助。 而且,在进行此操作的过程中,您可能会重新考虑并认为对于诸如此类的简单查询,您实际上并不需要那种功能。 祝好运。

CREATE PROCEDURE是在版本11中引入到PostgreSQL的,因此,如果您使用的是较早版本,则会收到ERROR: syntax error at or near "PROCEDURE"

从视图定义之外,您无权访问基础表。

您确定不是要使用CREATE FUNCTION吗?

CREATE FUNCTION performance_Report(date, date)

您有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;

否则,如果您完全删除了该行而不是存储过程,此查询是否有效?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM