PROCEDURE p_Srvlist(v_SrvName t_srvlist.srv_name%TYPE, v_Cursor OUT t_Cursor)
  AS
   v_SQLStr VARCHAR2(1024);
  
  BEGIN
   v_SQLStr := 'SELECT name, port, re, pwd
FROM list
WHERE name = ''' || v_SrvName || '''';

OPEN v_Cursor FOR v_SQLStr;

  EXCEPTION
    WHEN OTHERS THEN
     RAISE;
    
  END p_Srvlist;
请问我在VC中应该怎么获取到返回参数v_Cursor的值,大家看清楚了v_Cursor可是一个记录集,如果返回的是一个数,字符串等都很好做,可是记录集我就不懂了,请高手指点,最好能将相关代码写出来,谢谢!!

解决方案 »

  1.   

    oracle里面有一个例子,可以通过ado得到存储过程的返回的结果集合,你可以看看,
    是vb和ado的,
    oracle好久没有搞了
      

  2.   

    here is an example_CommandPtr     pCmdChange  = NULL;
    _ParameterPtr pprmByRoyalty = NULL;pCmdChange.CreateInstance(__uuidof(Command));
    pCmdChange->CommandType = adCmdStoredProc;
    pCmdChange->CommandText = "pkg_test.get";

    //Define Integer/variant.
    pprmByRoyalty.CreateInstance(__uuidof(Parameter));
    VARIANT vtRoyalty;
    vtRoyalty.vt = VT_I2;
    vtRoyalty.iVal = 20;
    pprmByRoyalty = pCmdChange->CreateParameter("param1",adInteger,adParamInput,sizeof(int),vtRoyalty);
    pCmdChange->Parameters->Append(pprmByRoyalty);pprmByRoyalty->Value  = vtRoyalty;
               
    //Create Recordset by executing the command
    pCmdChange->ActiveConnection = theApp.m_pConnection;//Create Recordset by executing the command
    m_pRecordset->CursorType=adOpenStatic;
    m_pRecordset->LockType=adLockPessimistic;
    m_pRecordset = pCmdChange->Execute(NULL,NULL,adCmdStoredProc); 
    m_pRecordset->Open("{CALL (?{20})}",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenStatic,adLockPessimistic,adCmdStoredProc);but m_pRecordset is a forward only recordset.