执行下面的代码就会报错。 
BOOL AOracleDatabase::GetOfflineMsg (CString strReceiveId , CString& strMsgList ,CString* pErrMsg )
{
// ----------------------------
_ParameterPtr parMsgList ; 
parMsgList=pCommand->CreateParameter (_T("strMsgList"),adVarChar,adParamOutput,16000 ) ; // make sure the param
 is large enoguh to retreive the data  . 
hr = pCommand->Parameters->Append (parMsgList ) ; 
ASSERT( FAILED (hr)==FALSE ) ; 
// ----------------------------
try
{
// ------------execution -------------------------------------
pCommand->ActiveConnection = m_pConnection ; 
pCommand->CommandText =_T("sp_getdelaymsg1") ; 
pCommand->CommandType = adCmdStoredProc ; 
hr=pCommand->Execute (NULL,NULL,adCmdStoredProc ) ; 
ASSERT(FAILED(hr)==FALSE ) ; 
// -----------------------

_variant_t varMsgList ; 
varMsgList = pCommand->Parameters->GetItem (_T("strMsgList"))->GetValue () ; 

}create or replace procedure sp_getdelaymsg1 (strMsgList out varchar2 ) is
i int ;
begini := 0 ; loop
  i:=i+1;  
  if i>2024 then 
    exit;
  end if;
  strMsgList := strMsgList + 'a' ;   -- strMsgList 长度小的话就不会出错。 
end loop;end sp_getdelaymsg1;

解决方案 »

  1.   

    出什么错,看你调用存储过程的代码不象有问题而且你字符窜短也是ok的你把字符窜弄长无非就是把这个地方改一下,把2024改大一点咯if i>2024 then 在sp里面 循环值钱,也初始化一下你的这个output参数select strMsgList = ''另外,你直接在数据库里的查询里跑这个sp,能ok吗
      

  2.   

    不好意思,最近有点忙 。 
    在LOOP之前加了strMsgList :=''后仍无济于事, 在PL/SQL中执行存储过程也会出现同样的错误。 另,上面的存储过程是ORACLE的。 谢谢。
      

  3.   

    CString楼主查查这个类的局限性,是不是和它有关系?
      

  4.   

    不会, 现在是返回值有问题, 程序执行到 _variant_t varMsgList ; 
    varMsgList = pCommand->Parameters->GetItem (_T("strMsgList"))->GetValue () ; 
    时就报错,这时用于接收返回值的对象还没牵涉到CString