2014-03-26 130 views
0

我需要在Firebird 2.5中编写存储过程。我写这个SQL查询:从选择查询创建过程

INSERT INTO A_OBRATYKUMHIST(OBRAT, MONTH, YEAR, SECURITYUSER_ID, FIRM_ID) 
select 
    sum(AO.Obrat), 11, 2010, AO.SecurityUser_ID, AO.Firm_ID 
from A_OBRATYKUMHIST_TEMP AO 
where 
    AO.Rok = 2010 
    and AO.Mesic <= 11 
group by 
    AO.SecurityUser_ID, AO.Firm_ID; 

我的目标是填充表与累计和。

编辑1:

所以我写了这一点:

SET TERM^; 

CREATE OR ALTER PROCEDURE A_TESTIK (
    start_year integer, 
    end_year integer) 
returns (
    obrat integer, 
    mesic integer, 
    rok integer) 
as 
declare variable "YEAR" integer = 2005; 
declare variable "MONTH" integer = 1; 
begin 
    select 
     sum(II.localamountwithoutvat), ib_decodedate_month(VatDate$DATE), 
      ib_decodedate_month(VatDate$DATE) 
    from IssuedInvoices II 
    group by 
     ib_decodedate_month(VatDate$DATE), ib_decodedate_month(VatDate$DATE) 
    into :obrat, :mesic, :rok; 
    suspend; 
end^ 

SET TERM ;^

/* Following GRANT statetements are generated automatically */ 

GRANT SELECT ON ISSUEDINVOICES TO PROCEDURE A_TESTIK; 

/* Existing privileges on this procedure */ 

GRANT EXECUTE ON PROCEDURE A_TESTIK TO SYSDBA; 

但是当我运行它,我得到错误:"Multiple rows in singleton select"。我该如何解决它?

+0

阅读材料:Interbase的6.0语言参考] (http://www.ibphoenix.com/files/60LangRef.zip)(特别是第3章程序和触发器)和[Firebird 2.5语言参考更新](http://www.firebirdsql.org/file/documentation/reference_manuals/参考, nce_material/html/langrefupd25.html) –

+0

如果这没有帮助,请更具体地说明你想知道的内容。 –

+0

@Mihai 有用的评论 – Sk1X1

回答

1

如果SELECT返回多行,那么你需要使用FOR SELECT ... DO ...

改变身体您的存储过程来:

FOR select 
     sum(II.localamountwithoutvat), ib_decodedate_month(VatDate$DATE), 
     ib_decodedate_month(VatDate$DATE) 
    from IssuedInvoices II 
    group by 
     ib_decodedate_month(VatDate$DATE), ib_decodedate_month(VatDate$DATE) 
    into :obrat, :mesic, :rok 
DO 
    suspend; 
+0

不错,谢谢! – Sk1X1

1

这里是火鸟PROC语法:

CREATE PROCEDURE name [(param1 datatype1, param2 datatype2, ...)] 
[RETURNS (param3 datatype3, param4 datatype4, ...)] 
AS BEGIN 
    <body> 
END; 

剩下的就是你了!

Here is some good material about procs in Firebird

+0

谢谢,我会检查它。 – Sk1X1

+0

如果我的答案送达!将答案标记为已回答! Up_One给我! –

+0

我编辑了我的问题:) – Sk1X1