请问ORACLE存储过程如何返回数据集(select * from talbe数据全面返回),我要它在DELPHI里用DBGRID显示怎么做?谢谢

解决方案 »

  1.   

    create or replace package pkg_test 
    as
    type cur_test is ref cursor; -- 定義一個cursor的type
    end pkg_test;
    /
    create or replace procedure p_test
    (
    v_cur out pkg_test.cur_test
    )
    as
    v_sql varchar2(100); -- 
    begin
    v_sql := 'select a1,a2 from test';
    OPEN v_cur FOR v_sql; --
    exception
    when others then 
    DBMS_OUTPUT.PUT_LINE('Error ---------------' || sqlcode || ' : ' || sqlerrm ); 
    end p_test;
    /
    然后在delphi里面:
    query.sql.clear;
    query.sql.add('select * from pkg_test.p_test()');
    query.open;
    將datagrid的數據源和該query關聯即可。
      

  2.   

    SQL> select * from aa;        ID NAME 
    ---------- -------- 
            1 猪八戒 
            2 孙悟空 
    CREATE OR REPLACE PACKAGE pkg_test 
    AS 
    TYPE myrctype IS REF CURSOR; 
    END pkg_test; 
    / create or replace PROCEDURE get(p_rc OUT pkg_test.myrctype) 
      IS 
         sqlstr   VARCHAR2 (50); 
      BEGIN 
         sqlstr:='select * from aa'; 
         OPEN p_rc FOR sqlstr; 
    END get; 

    在delphi中:
    with  ADOStoredProc1 do
    begin
      Close;
      procedurename:='get';
      Parameters.CreateParameter('p_id',ftstring,Pdinput,20,'1');
      parameters[0].Name:='p_id';
      Parameters[0].Value:='3';
      execproc;
      Open;
    end;