Ошибка -104 Неожиданный конец команды при создании хранимой процедуры Firebird

Я хочу создать хранимую процедуру в 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'

person ikonomn    schedule 25.09.2012    source источник
comment
КАКИЕ ошибки вы получаете!?!?!?   -  person marc_s    schedule 25.09.2012
comment
возможный дубликат Ошибка -104 при создании хранимой процедуры Firebird   -  person Marcos Placona    schedule 19.12.2012


Ответы (1)


Вы должны добавить оператор 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 ; ^

Обратите внимание, что терминатор по умолчанию — ^, а также обратите внимание, что вы устанавливаете ; в качестве нового терминатора ранее и сбрасываете его обратно на ^ после объявления хранимой процедуры.

person LightBulb    schedule 18.10.2012