L
lonkers
Unregistered / Unconfirmed
GUEST, unregistred user!
各位,这是个C++Builder相关的问题,不过跟delphi应该类似,所以我就贴过来了。希望大家帮忙~小弟在TSQLStoredProc调用oracle存储过程时碰到一个问题,纠缠了三天仍未解决,问题是这样的: 若存储过程中只含有输入型参数或只含有输出型参数,则执行SQLStoredProc->ExecProc()时程序不会发生错误;输出参数的值也正确。 若存储过程中即含有输入型参数也含有输出型参数,则执行SQLStoredProc->ExecProc()时程序也发生错误,但此时读输出参数,返回值一直是null。 存储过程很简单,在oracle中编译和执行都不会有错误,如下: CREATE OR REPLACE PROCEDURE sp_dbe_test ( in_job_no IN varchar2, in_job_seq IN varchar2, out_msg OUT VARCHAR2 ) AS BEGIN out_msg := in_job_no; out_msg := in_job_seq; out_msg := 'abcdefg'; END; C++Builder中调用程序如下: SQLStoredProc->Prepared = true; SQLStoredProc->ExecProc(); strOutMsg = SQLStoredProc->Params->ParamByName("out_msg")->AsString; 执行完后strOutMsg一直为null值。 跟踪了一下代码,发现在SqlExpr.pas单元中执行TCustomSQLDataSet.GetOutputParams后取得的返回值即为null。。 不晓得是自己使用方法不正确还是DBExpress本身有bug... C++Builder已打过Update4的补丁了。 分不多,还请各位高手多多帮忙。小弟谢过~