CREATE OR REPLACE PACKAGE pkg_test 
AS 
TYPE myrctype IS REF CURSOR; 
END pkg_test; 
/ create or replace PROCEDURE get(p_id in varchar2,p_rc OUT pkg_test.myrctype) 
  IS 
     sqlstr   VARCHAR2 (50); 
  BEGIN 
     sqlstr:='select * from aa where id>='||p_id; 
     OPEN p_rc FOR sqlstr; 
END get; 
/ SQL> select * from aa;        ID NAME 
---------- -------- 
        1 猪八戒 
        2 孙悟空 procedure TForm1.Button1Click(Sender: TObject); 
begin
with  ADOStoredProc1 do
begin
  Close;
  procedurename:='get';
  Parameters.CreateParameter('p_id',ftstring,Pdinput,20,'1');
  parameters[0].Name:='p_id';
  //Parameters[0].Value:='3';
 Open;
end;
end;

解决方案 »

  1.   

    给个来自“睡眠不足”的贴子,请参考:
    http://expert.csdn.net/Expert/topic/1931/1931038.xml?temp=.6913568
    此贴中的第五阶段的第一个QA。
      

  2.   

    beckhambobo(beckham):还有别的方法吗?我试过了,不行。出错信息为参数数目不正确。
      

  3.   

    create or replace procedure getrecordcount(tableneme in varchar2,
      recordcount out integer)
    as
    begin
      select count(*)  into recordcount from cat;
    end;
    /procedure TForm1.Button1Click(Sender: TObject);
    begin
       ADOStoredProc1.Parameters.CreateParameter('tablename',ftstring,pdinput,20,null);
       ADOStoredProc1.Parameters.CreateParameter('recordcount',ftinteger,pdoutput,4,null);
       ADOStoredProc1.Parameters[0].Value:='aaa';
       ADOStoredProc1.ExecProc ;
       showmessage(inttostr(ADOStoredProc1.Parameters[1].Value));
    end;
    上面只是对cat表操作,如果是对参数据tablename操作则要用动态SQL!
      

  4.   

    楼上的兄弟,我要的是有返回结果集的存储过程,在Delphi中主要是游标难处理,Oracle的存储过程我都写好了,也可以用SQLPLUS执行块,但就是无法在DELPHI中得到结果集。