--oracle语句
   create table ACCOUNTID
(
  INITID     INTEGER,
  STRACCOUNT VARCHAR2(10)
)
/
insert into ACCOUNTID values('1','aa')/     create   or   replace procedure   test1(cname   in   varchar2,cdept   in   out   varchar2,cid   out   resultData)   
      is   
      begin   
      
                open   cid   for   
                    select   *   from   ACCOUNTID;   
                  cdept:='111';   
      end; 
            'vb调用代码'cn.Open "Provider=MSDAORA.1;Persist Security Info=False;" & _
          "User ID=" & strUid & ";PassWord=" & strPWD & ";Data Source=" & strDatabase & ";" '            Set cmd = New ADODB.Command
          cmd.ActiveConnection = cn          cmd.CommandType = adCmdStoredProc
          cmd.CommandText = "test1"
          cmd.Parameters.Append cmd.CreateParameter("cname", adLongVarChar, adParamInput, 1000, " ")
        
             cmd.Parameters.Append cmd.CreateParameter("cdept", adLongVarChar, adParamInputOutput, 1000, " ")
          Set rs = cmd.Execute(Null, Null, adCmdStoredProc)
          
          MsgBox rs.RecordCount适时错误'-2147217900'
ora-06550:line 1,column7:
object system.test1 is invalid
ora-06550:line1,column 7:
pl/sql:statement ignored在网上看过好多事例,可是就是不好用,网上有介绍说用游标返回结果集,可是在vb6.0中不会写,项目比较急,我真的尽力了,希望各位帮帮忙,帮忙写出个完整的通过游标返回存储过程的事例,谢谢了      

解决方案 »

  1.   

    CREATE OR REPLACE procedure FTTEST.getproduct2(mycur out sys_refcursor)
      as 
    begin  open mycur for select * from product;
      
    end;
    --toad测试
    declare
      r_c sys_refcursor;
      v_c product%rowtype;
    begin
      getproduct2(r_c);
      loop
        fetch r_c into v_c;
        dbms_output.PUT_LINE(v_c.productid|| '     ' || v_c.productname);
        exit when r_c%notfound;
      end loop;
    end;  
      

  2.   

    在ADO.net调用这个存储过程取结果集:
    参数为
    cmd.Parameters.Add("mycur", System.Data.OracleClient.OracleType.Cursor).Direction = ParameterDirection.Output;
      

  3.   

    能详细的说一下吗?在sqlplus中不能执行