方法是使用存贮过程。此存贮过程必须以游标作为第一个参数。后面可以跟上其它参数。此游标须是 IN/OUT 型的。你可以使用一个通用游标类型,并将此类型定义在一个 package 中。
  下面是简短的举例代码:
  
          CREATE package Test_Package 
          as 
            type Test_Type is ref cursor; 
          end; 
    
          CREATE PROCEDURE Test_Procedure ( 
          Test_Cursor IN OUT Test_Package.Test_Type) 
          AS 
            BEGIN 
            OPEN Test_Cursor FOR 
            SELECT * 
            FROM Test_Table 
          END Test_Procedure; 
  
  在 Delphi 中,你需要正确设置好在存贮过程中定好的参数,一个技巧就是将游标参数在对象检视器中设置为 ftCursor, 
    
  现在将一个 Datasource 与存贮过程构件相联,激活该构件,一切就大功告成了。! 
    
  PS: 我使用 Oracle 8.1.6! 但相信早期版本理论上也一定适用! ;-) 

解决方案 »

  1.   

    CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;   PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
    END pkg_test;
    /CREATE OR REPLACE PACKAGE BODY pkg_test
    AS
       PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
       IS
          sqlstr   VARCHAR2 (500);
       BEGIN
          IF p_id = 0 THEN
             OPEN p_rc FOR
                SELECT ID, NAME, sex, address, postcode, birthday
                  FROM student;
          ELSE
             sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
             OPEN p_rc FOR sqlstr USING p_id;
          END IF;
       END get;
    END pkg_test;
    /也可以根据不同输入参数来输出记录集.