2

Firebird でストアド プロシージャを作成したい:

 CREATE PROCEDURE CalcPvIncome
 ( BeginDate date,
   EndDate   date,
   KwPrice   decimal (2,2) ) 
   
RETURNS ( Total_PV_Production decimal (9,2),
          Total_Income decimal (9,2) )
AS
BEGIN
  
   FOR SELECT SUM(ENERGY/1000), SUM((ENERGY/1000) * :KwPrice) 
       FROM PVPROD 
       WHERE proddate >= :BeginDate AND proddate <= :Enddate 
       INTO :Total_PV_Production , :Total_Income
       DO
       
       BEGIN
        SUSPEND ;
       END
END

次のエラーが表示されます。

エンジンコード : 335544569

エンジン メッセージ: 動的 SQL エラー SQL エラー コード = -104 コマンドの予期しない終了 - 行 18、列 9

SQL ステートメント:

SELECT 
   SUM(ENERGY/1000) AS Total_PV_Production, 
   sum((ENERGY/1000)*0.55) as Total_Income
FROM 
   PVPROD 
where  
   proddate >= '12.06.2012' and  proddate <= '12.07.2012'
4

1 に答える 1

6

SET TERMストアド プロシージャの前後にステートメントを追加する必要があります。「ターミネータ文字」を変更するために使用されます。次に例を示します。

SET TERM ^ ;

CREATE PROCEDURE CalcPvIncome
( BeginDate date,
  EndDate   date,
  KwPrice   decimal (2,2) ) 

RETURNS ( Total_PV_Production decimal (9,2),
          Total_Income decimal (9,2) )
AS
BEGIN
  ...
END

SET TERM ; ^

デフォルトのターミネータはであり、ストアドプロシージャ宣言の前に新しいターミネータとして^設定し、後でリセットすることに注意してください。;^

于 2012-10-18T05:47:20.670 に答える