在delphi6中如何调用oracle中返回数据集的存储过程?一般的存储过程可以调用,但是只要这个存储过程返回数据集,就会发生调用错误,是不是delphi中不支持这种调用呢?(sql server可以实现,oracle不能实现,怪!)
请高手指点,谢谢!有代码更好!

解决方案 »

  1.   

    yes,oracle的存储过程不能构直接返回数据集的,也就是说过程里面不能直接用这样的select * from table;
      

  2.   

    小弟以前碰过这样的问题,最终用第三方控件解决了。但一直在寻找一种通过标准控件的解决方案。因为那个第三方控件是Oracle专用的,用起来虽然十分的爽,但就失去了通用性。不过,Oracle返回数据集的存储过程好象有点怪,与其它数据库不太一样(小弟只用过Oracle),因此这个通用性的问题也变得不大重要了。
      

  3.   

    在Delphi中用Ado组件可以调用返回数据集的存储过程。
    例如:
    m_adop := TAdoStoredProc.Create(nil);
        
        m_adop.ProcedureName := 'pkg.procedureName';
        m_adop.Parameters.Clear;
        with m_adop.Parameters.AddParameter do
        begin
            DataType := ftinteger;
            Direction := pdinput;
            name := 'num';
            Value := 10; 
        end;
        with m_adop.Parameters.AddParameter do
        begin
            DataType := ftinteger;
            Direction := pdinput;
            name := 'iSp';
            Value := 0;   
        end;
        m_adop.Open;
    在Oracle 9i中,可以使
      

  4.   

    续上:
    pkg.procedureName有两个输入参数 num in number, iSp in number,另外还有一个输出参数 vDatas in out t_SPCur。t_SPCur是一个定义在包头中的游标类型。在调用存储过程程时,不用指定游标类型的参数。 
    在Oracle 9i中,可以使用这段代码调用返回数据集的存储过程。8i则会出错,其它类型的数据库没试过。另外,使用这段代码时,每次调用都会产生一个4k的内存泄漏(我正在找原因)。
      

  5.   

    啊,我还正准备用oracle的存储过程呢!关注强烈
      

  6.   

    我只是想提问:(看到我的提问你就知道我无法回答你的问题)
    不知道delphi的ado和oracle连接时,出现不正常(每一次都要让我输入密码,如果设置了adoconnection 的LoginPrompt为false就不能连接了),如何处理?并不象和access,sql server那样,并不存在如此的问题,不知道那位有办法?最好给我一个这样的是设置过程和办法,我先谢了!