错误-104创建Firebird存储过程的命令意外结束

时间:2012-09-25 15:21:47

标签: stored-procedures firebird firebird2.5

我想在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'

1 个答案:

答案 0 :(得分:4)

您必须在存储过程之前和之后添加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 ; ^

请注意,默认终止符为^,并且还要注意您之前将;设置为新的终止符,并在存储过程声明之后将其重置为^