最近在学习delphi数据库开发,请问一下 TADOCommand 如何调用Oracle的存储过程,如何得到存储过程的返回值啊。例如有下面一个存储过程: 
sql 代码
create or replace function sp_create_XXX(   
      date    int,   
      errorInfo out char,   
      cursor     out MyType.CURSOR    
)    
  return number   
 is  
begin  
   ......;//代码省略   
  
  return 0;   
end sp_create_XXX;   
如何使用TADOCommand 执行上面的过程,并得到函数的返回值 0,和errorInfo 的值呢。有对delphi了解的,请指点下, 谢谢。

解决方案 »

  1.   

    貌似要装一个Oracle 发的 ADO provider吧,delphi自带的不能用。
      

  2.   

    楼上的能否说的详细点啊, 
    但是我可以链接上oracle的数据库,使用下面的代码调用command.CommandText := 'sp_create_report';     // TODO
      command.CommandType := cmdStoredProc;
      command.Parameters.Clear;  command.Parameters.CreateParameter('date', ftInteger, pdInput, 10, null);
      command.Parameters.CreateParameter('errorInfo', ftString, pdOutput, 255, null);  command.Parameters.CreateParameter('cursor', ftCursor, pdOutput, 0, null);  command.Parameters.ParamByName('date').value := iDate;
      
      try
        command.Execute;
        try
          i:= command.Parameters.ParamValues['return']; // 如何得到存储过程的返回值啊,
          sErrorInfo := command.Parameters.ParamValues['errorInfo'];
        except end;
    得到如下的错误:
    不正常地定义参数对象。提供了不一致或不完整的信息。 sql:
    ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'SP_CREATE_XXX' 时参数个数或类型错误
      

  3.   

    create or replace function sp_create_XXX(   
          date    int,   
          errorInfo out char,   
          cursor     out MyType.CURSOR    
    )    
      return number   
     is  
    begin  
       ......;//代码省略   
      
      return 0;   
    end sp_create_XXX; 这个是存储过程吗?
      

  4.   

    使用ADOStoredProc,Parameters[0].value为return返回值,Parameters[1..n].value为传入值,如果返回数据集(select)则该ADOStoredProc可以当作adodataset使用
      

  5.   

    to jslygwx(海豚)
    我想用 TADOCommand 来调用该存储过程, 不需要得到cursor返回的结果,只要能正常调用该存储过程就可以了, 使用TADOCommand应该如何设置cursor的参数。 谢谢哦
      

  6.   

    在delphi中开发oracle最好用的控件是odac 你可以在网上找下,有full resource下载。用这组控件你就不会有这个问题。