2011-04-05 8 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 DATEの代わりに@startDate DATETIMEを使用する必要があります。 –

+0

pgAdmin、入力パラメータがなくても、構文エラーはまだ存在します。 – user195257

+0

この構文は、PostgreSQLとは何の関係もなく、プロシージャに使用する言語がなくても、PostgreSQLとは何の関係もありません。マニュアルを開き、PostgreSQLでストアドプロシージャ(関数)を書く方法の学習を始めてください。 –

答えて

0

ビュー定義の外側からは、基になるテーブルにアクセスできません。

+0

もちろん、このクエリにはビューを使用していますか? – user195257

+0

ビューの 'SELECT'に' OrderDate'を追加することができます。しかし、それは結果セットを変更するでしょう - あなたが望むものではないかもしれない 'OrderDate'によってグループ化する必要があります...また、それは通常の' WHERE'と比較してパフォーマンスを低下させます – a1ex07

+0

私はこれを前に試しましたが、とにかく、あなたが言うように望ましい結果 – user195257

1

いいえ、できません。ビューをSalesRep.Nameで集計する必要があります。あなたがしたいことは、それらのSUMをフィルタリングすることです。 2つのオプションがあります。

  1. ビューではなくストアドプロシージャを作成します。こうすることで、フィルタリングの入力パラメータとして開始日と終了日を設定できます。
  2. DB構造をまったく作成しないでください。クエリを使用して、ソースコードにパラメータを設定してください。

EDIT

だから、あなたは質問を変え、今、あなたは、PostgreSQLのストアドプロシージャを作成します。あなたはこれを見てみたいかもしれません:A Basic Introduction to Postgres Stored Procedures。それを読むためにあなたの時間をかけなさい、プロセスで得られた知識は確かに役に立つでしょう。また、このような簡単なクエリのために、そのような機能を実際には必要としないと再評価して考えるかもしれません。がんばろう。

+0

プロシージャを作成しようとしましたが、構文エラーが発生しました:/ – user195257

+0

PostgreSQLでストアドプロシージャを作成する方法について、答えを編集しました。それが役に立てば幸い。 –

+0

@ user195257できましたか?我々に教えてください –

2

PostgreSQLには「CREATE PROCEDURE」がありません。 reportedであり、他のデータベースでストアドプロシージャが必要なものの大部分は、PostgreSQLでCREATE FUNCTIONで実行することができます。

CREATE FUNCTION performance_Report(date, date) 
0

は、あなたがCREATE FUNCTIONを使用することを意味するものではありませんでしたあなたはよろしいですか?

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

あなたはAND ShopOrder.OrderDate BETWEEN @startDate AND endDateは、それがAND ShopOrder.OrderDate BETWEEN @startDate AND @endDateすべきではない持っている: