如何从Firebird检索输出变量

时间:2016-11-05 08:34:02

标签: sql stored-procedures firebird lazarus freepascal

我有一个使用Firebird的免费pascal应用程序。如何从Firebird存储过程中检索输出变量:

input parameters: ID (integer)
output parameters: G (integer)

begin
 if(select town.count from town where town.id=:id) then
    G = 100
 else
    G = 200;
  suspend;
end

in designer->SQL 
EXECUTE PROCEDURE ID_DEV :ID RETURNING_VALUES :G

在代码中:

SQLQueryProc.Prepare; //here i got an error
SQLQueryProc.ParamByName('ID').Value:=res;
SQLQueryProc.ExecSQL();
SQLTransaction.CommitRetaining;
ID:=SQLQueryProc.FieldByName('G').AsInteger;

当我运行我的应用时出现错误:

  

令牌未知行(其中:G位于其中)

我尝试过很多种组合。是什么原因?

1 个答案:

答案 0 :(得分:1)

RETURNING_VALUES :G子句只是PSQL中的有效Firebird语法(因此在存储过程中)。如果要执行存储过程,则只应使用:

EXECUTE PROCEDURE ID_DEV :ID

由于您希望拥有可执行存储过程,因此还应从存储过程中删除SUSPEND,因为在存储过程中使用suspend-statement会使其成为可选择的存储过程。