读取 Firebird 存储过程的返回值

Read return values of a Firebird stored procedure

本文关键字:返回值 存储过程 Firebird 读取      更新时间:2023-10-16

>我有这个火鸟存储过程:

SET TERM ^ ;
CREATE PROCEDURE MYSP ( FIRSTPARAM Varchar(3) )
    RETURNS ( ERROR Varchar(128) )
AS BEGIN
    /* a lot of things, including setting a value to ERROR */
    suspend;
END^
SET TERM ; ^

我需要在生成器 XE2 C++中执行此过程,最后读取其返回值 ( ERROR ) 以查看它是否成功。过程仅返回一行。

我尝试了这种方式:

TIBQuery* q = DMH->ordQuery;
q->Close( );
q->SQL->Clear( );
q->SQL->Text = "EXECUTE PROCEDURE MYSP(:P1)";
if ( !DMH->ordTrans->InTransaction )
{
    MakeCommit = true;
    DMH->ordTrans->StartTransaction( );
}
if ( !q->Prepared )
    q->Prepare( );
q->Params->ParamByName( "P1" )->Value = "abc";
q->Open();
//success if error field contains NULL
TField* errorField = q->FieldByName( "ERROR" );
bool success = errorField->IsNull;
if ( MakeCommit )
    DMH->ordTrans->Commit( );

它给了我一个关于errorField访问冲突,因为它找不到这样的字段。

我不得不更改语句:

SELECT ERROR
FROM MYSP(:P1)