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

标签 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

我收到这个错误:

Engine Code : 335544569

Engine Message : Dynamic SQL Error SQL error code = -104 Unexpected end of command - line 18, column 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'

最佳答案

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

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

关于stored-procedures - 错误 -104 创建 Firebird 存储过程的命令意外结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12586075/

相关文章:

sql - 简单的 Firebird 查询非常慢

postgresql - 在 Postgres 中,表更改后如何重新验证 ("type-check") 函数和过程?

MySQL:从每组中选择百分之 N 的随机样本并更新字段

SQL - 每列的条件

php - 如何使 ibase_connect 超时?

sql - Firebird - 获取触发器内所有修改的字段

mysql - 如何从存储过程中的单个选择查询设置多个输出变量值

php - 添加另一个条件过程

sql - 使用 select 将行添加到 Firebird 查询结果

firebird - 在 FirebirdSql 中,如何从过程返回异常消息