2011-04-05 75 views
0

更改爲過程,在'PROCEDURE'獲取語法錯誤有什麼想法?SQL過程錯誤

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

這是什麼數據庫?如果它是SQL Server,則可能需要使用@startDate DATETIME而不是@startDate DATE。 – 2011-04-05 22:49:54

+0

pgAdmin,即使沒有輸入參數,語法錯誤仍然存​​在。 – user195257 2011-04-05 22:52:11

+0

該語法與PostgreSQL無關,即使您想用於該過程的語言也沒有。打開手冊並開始學習如何編寫PostgreSQL中的存儲過程(即函數)。 – 2011-04-06 05:38:42

回答

0

從視圖定義的外部,您無權訪問基礎表。

+0

Ahhhh當然..有無論如何使用此查詢的意見? – user195257 2011-04-05 22:20:36

+0

您可以嘗試在視圖的「SELECT」中添加'OrderDate'。但它會改變結果集 - 你還需要通過'OrderDate'進行分組,這可能不是你想要的...同樣,它會降低性能,與普通的'WHERE' – a1ex07 2011-04-05 22:25:57

+0

我之前試過但它不給我無論如何,謝謝! – user195257 2011-04-05 22:28:04

1

不,你不能那樣做。您希望您的視圖通過SalesRep.Name生成聚合。你想要做的是過濾這些SUM。您有兩種選擇:

  1. 創建存儲過程而不是視圖。這樣您可以將開始日期和結束日期作爲過濾的輸入參數。
  2. 根本不要創建數據庫結構,只需使用查詢並讓您的源代碼填充參數即可。

編輯

所以,你改變了這個問題,現在要在PostgreSQL中創建一個存儲過程。你可能想看看這個:A Basic Introduction to Postgres Stored Procedures。花點時間閱讀,在這個過程中獲得的知識肯定會有幫助。而且,在您通過它的方式中,您可能會重新評估,並且認爲您並不需要這種功能來進行簡單的查詢,例如此類查詢。祝你好運。

+0

試圖創建一個過程,但現在出現語法錯誤:/ – user195257 2011-04-05 22:44:34

+0

我編輯了答案,指導您瞭解如何在Postgresql中創建存儲過程。希望能幫助到你。 – 2011-04-06 02:05:20

+0

@ user195257你能做到嗎?讓我們知道 – 2011-04-11 16:33:29

2

PostgreSQL沒有「CREATE PROCEDURE」。它是reported,你可能需要在其他數據庫中存儲過程的大部分可以在PostgreSQL中用CREATE FUNCTION完成。

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; 

否則,如果您完全刪除該行而不是存儲過程,則此查詢是否可以正常工作?