我有一个使用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位于其中)
我尝试过很多种组合。是什么原因?
答案 0 :(得分:1)
RETURNING_VALUES :G
子句只是PSQL中的有效Firebird语法(因此在存储过程中)。如果要执行存储过程,则只应使用:
EXECUTE PROCEDURE ID_DEV :ID
由于您希望拥有可执行存储过程,因此还应从存储过程中删除SUSPEND
,因为在存储过程中使用suspend-statement会使其成为可选择的存储过程。