我用的是DBE连接ORCLE。
具体是给个写过程的例子,以及如何在DELPHI调用

解决方案 »

  1.   

    Oracle 侧:CREATE PACKAGE MYPKG
    IS
      TYPE CursorType IS REF CURSOR;
    END MyPkg;CREATE PROCEDURE RETURN_RESULT_SET
     (InID IN Varchar2, ResultSetCursor IN OUT MyPkg.CursorType) AS
    BEGIN
      open oCursor for select id,date,name from db where id = InID;
    END;Delphi侧:
    TStoredProc.DataType := ftCursor;
    TStoredProc.Open;
    while not TStoredProc.Eof do
    begin
       {do something}
       TStoredProc.Next;
    end;
      

  2.   

    oracle的store procedure 不支持返回一个记录集,并且不支持临时表,只可以返回一个游标,返回后自己处理。
      

  3.   

    http://www.csdn.net/expert/topic/653/653205.xml?temp=.9530908
      

  4.   

    Oracle 侧:
    CREATE PACKAGE TestPKG
    IS
      TYPE CursorType IS REF CURSOR;
    END TestPKG;CREATE PROCEDURE Proc_GetDataSet
    (InID IN Varchar2, ResultSetCursor IN OUT TestPKG.CursorType) AS
    BEGIN
      open ResultSetCursor for select id,name from db where id = InID;
    END;Delphi侧:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with StoredProc1 do
      begin
        if Active then Close;
        StoredProcName := 'PROC_GETDATASET';
        ParamByName('INID').Value := 1;
        ParamByName('ResultSetCursor').DataType := ftCursor;
        Prepare;
        Open;
      end;
    end;
     
    编号: 2 发送者 wzd801027 发送时间 2002-4-27 8:17:41 删除  回复  
    内容 
    ----------------------------------------------------------------假如你的存储过程‘PROC1’有两个参数,一个是输入参数‘PAR1 VARCHAR2’,另一个是输入参数‘PAR2 IN OUT 游标类型’。则STOREDPROC1的参数为两个。第二个参数的类型默认为NONE,你一定要修改为CURSOR。同时,在调用STOREPROC1时,只需给第一个参数赋值即可,第二个参数不用赋值。
    storeproce1.close;
    storeproce1.params[0].value:=par1;
    storeproce1.open;
    同时,加入一个datasource1,dbgrid1.
    datasource1.dataset:=storeproce1;
    dbgrid1.datasource:=datasource1.
    这样返回记录就显示在dbgrid1中了。别忘了给我加分呀!!!!!别忘了给我加分呀!!!!!别忘了给我加分呀!!!!! 
    编号: 1 发送者 wzd801027 发送时间 2002-4-27 8:17:04 删除  回复  
    内容 
    ----------------------------------------------------------------假如你的存储过程‘PROC1’有两个参数,一个是输入参数‘PAR1 VARCHAR2’,另一个是输入参数‘PAR2 IN OUT 游标类型’。则STOREDPROC1的参数为两个。第二个参数的类型默认为NONE,你一定要修改为CURSOR。同时,在调用STOREPROC1时,只需给第一个参数赋值即可,第二个参数不用赋值。
    storeproce1.close;
    storeproce1.params[0].value:=par1;
    storeproce1.open;
    同时,加入一个datasource1,dbgrid1.
    datasource1.dataset:=storeproce1;
    dbgrid1.datasource:=datasource1.
    这样返回记录就显示在dbgrid1中了。别忘了给我加分呀!!!!!别忘了给我加分呀!!!!!别忘了给我加分呀!!!!!