这是一个PKG 包头:
create or replace package Testpkg IS
  TYPE T_CURSOR IS REF CURSOR;   
  Procedure fn_getRecord(Re_cursor Out T_CURSOR ,strCompanyName Varchar2,strDate Varchar2);
  Procedure    Get_ComanyName(Re_cursor Out T_CURSOR );
End ; 这里是包体:
create or replace package body Testpkg Is
  --------------------------------------------------------------------------------------fn_getRecord
Procedure  fn_getRecord(Re_cursor Out T_CURSOR ,strCompanyName Varchar2,strDate Varchar2)
   IS 
    V_CURSOR T_CURSOR; str Varchar2(500):='';
Begin
    ///这里怎么从Get_ComanyName返回的记录集里面查找到 公司编号='20081234'
      testpkg.get_comanyname(V_CURSOR);
     --Select * From V_CURSOR;
    Re_cursor:=V_CURSOR;
  commit; 
End ; 
  ------------------------------------------------------------获取公司名
Procedure Get_ComanyName(Re_cursor Out T_CURSOR )
   IS 
    V_CURSOR T_CURSOR; 
    str Varchar2(500):='';
Begin    str:='Select  a.T$ncmp As 公司编号, a.T$dsca as 公司名称 From baan.ttccom000410 a' ;
    OPEN V_CURSOR  for str ;
         
    Re_cursor:=V_CURSOR;  End ; 
  
------------------------------------------------------------------------End  ; 请问,我如何在我注释的地方实现这个功能
///这里怎么从Get_ComanyName返回的记录集里面查找到 公司编号='20081234'
通常有select * from table001
我这里能不能也写成如这样的,select * from V_CURSOR  ??
请大家帮忙一下,谢谢了。

解决方案 »

  1.   

    这样
    定义一个行类型的变量
    p_data table%rowtype;
    定义一个游标
    type p_cursor is ref cursor;
    定义一个游标的引用
    p_cc p_cursor;游标获取数据后
    fetch p_cc into p_data;
    取值
    p_data.公司编号
      

  2.   

    可以这样
    LOOP
    FETCH P_CC INTO P_DATA;
    SELECT T.*,P_DATA.XX FROM TABLE T WHERE T.OO= P_DATA.00 AND T.01 = P_DATA.02
    EXIT WHEN P_CC NOT FOUND
      

  3.   

    如果象楼上这样
    可以这样 
    LOOP 
    FETCH   P_CC   INTO   P_DATA; 
    SELECT   T.*,P_DATA.XX   FROM   TABLE   T   WHERE   T.OO=   P_DATA.00   AND   T.01   =   P_DATA.02 
    EXIT   WHEN   P_CC   NOT   FOUND
    那是一条条的了table001,和recordset联合查询   查询条件是2个记录集里面的字段00,字段01都相等。 
    希望和从2个表里面查数据类似 
    selece a.字段00,a.字段01,a.字段12,a.字段13,a.字段14 ,b.字段02,b.字段03 
    from table001 a ,recordset b
    where a.字段00=b.字段00 and a.字段01=b.字段01
    查了别的资料,都说是要建立临时表。难道这样直接使用游标就不行吗?
      

  4.   

    还有一个办法就是使用二维数据
    但这个我没有用过
    具体实现你可以在网上找一下资料可以参考一下这个实现
    DECLARE TYPE   emp_type   IS   RECORD 
    (   emp_id   employee_table.emp_id%TYPE, 
    emp_name   employee_table.emp_name%TYPE, 
    emp_gender   employee_table.emp_gender%TYPE   ); TYPE   emp_type_array   IS   TABLE   OF 
    emp_type   INDEX   BY   BINARY_INTEGER; emp_rec_array   emp_type_array; 
    emp_rec   emp_type; BEGIN 
    emp_rec.emp_id   :=   300000000; 
    emp_rec.emp_name   :=   'Barbara '; 
    emp_rec.emp_gender   :=   'Female '; emp_rec_array(1)   :=   emp_rec; emp_rec.emp_id   :=   300000008; 
    emp_rec.emp_name   :=   'Rick '; 
    emp_rec.emp_gender   :=   'Male '; emp_rec_array(2)   :=   emp_rec; FOR   i   IN   1..emp_rec_array.count   LOOP 
    DBMS_OUTPUT.PUT_LINE( 'i= ' ¦ ¦i 
    ¦ ¦ ',   emp_id   = ' ¦ ¦emp_rec_array(i).emp_id 
    ¦ ¦ ',   emp_name   = ' ¦ ¦emp_rec_array(i).emp_name 
    ¦ ¦ ',   emp_gender   =   ' ¦ ¦emp_rec_array(i).emp_gender); 
    END   LOOP;   END; 
    --------------   Result   -------------- 
    i=1,   emp_id   =300000000,   emp_name   =Barbara,   emp_gender   =   Female 
    i=2,   emp_id   =300000008,   emp_name   =Rick,   emp_gender   =   Male
      

  5.   

    下面是我实现的
    你只需要把下面查询出的信息插入二维组中就可以了
    -----
    LOOP   
    FETCH       P_CC       INTO       P_DATA;   
    SELECT       T.*,P_DATA.XX       FROM       TABLE       T       WHERE       T.OO=       P_DATA.00       AND       T.01       =       P_DATA.02   
    EXIT       WHEN       P_CC       NOT       FOUND
    ---------create or replace procedure varry_test asTYPE emp_type IS RECORD (emp_id number,emp_name varchar2(100),emp_gender varchar(100)); 
    TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER; emp_rec_array   emp_type_array; 
    emp_rec   emp_type; p_data emp%rowtype;
    type my_cursor is ref cursor;
    p_cc my_cursor;
    p_count number;BEGIN 
      open p_cc for 'select t.id,t.name,t.salary from emp t';
      p_count :=1;
      loop 
      fetch p_cc into p_data;
      exit when p_cc%notfound;
      emp_rec.emp_id := p_data.id;
      emp_rec.emp_name := p_data.name;
      emp_rec.emp_gender := p_data.salary;
      emp_rec_array(p_count) := emp_rec;
      p_count := p_count+1;
      end loop;
      
      FOR i IN 1..emp_rec_array.count LOOP 
      DBMS_OUTPUT.PUT_LINE('emp_id = ' || emp_rec_array(i).emp_id 
                                   || ' emp_name = ' || emp_rec_array(i).emp_name  
                                   || ' emp_gender = ' || emp_rec_array(i).emp_gender); 
      
      END   LOOP;   
      
    END;