问题是这样的
有单号 A1
对应的卡号是
单号   卡考
A1     K1
A1     K2
但是卡K1 对应的单号可能还包含
单号   卡考
A1     K1
A2     K1
A3     K1
但是卡K2 对应的单号可能还包含
单号   卡考
A1     K2
A4     K2
A5     K2
同样单A5,可能还对应的卡考是
单号   卡考
A5     K6
A5     K7------------------------------------------------------
目标:
打算显示单号为A1下面的所有卡号和单号都显示出来,卡号对应的单号也显示出来
A1     K1
A1     K2
A2     K1
A3     K1
A4     K2
A5     K2
A5     K6
A5     K7

解决方案 »

  1.   

    如果有
    单号  卡考 
    A11   K11
    这个没有查询到和单号A1的关联,则不显示出来
      

  2.   

    两个存储过程p1,p2 相互调用procedure p1(记录 table%type, 总记录集 in out array) is
     for cur in (select * from table where 单号=记录.单号 and 卡号<>记录.卡号)
     loop
      在总记录集中添加当前记录table%type ,执行p2(当前记录, 总记录集)
     end loop;
    end p1;p2类似
      

  3.   

    楼主哪里有问题,具体些
    是array定义,还是执行p2
      

  4.   

    有单号 A1 
    对应的卡号是 
    单号  卡考 
    A1    K1 
    A1    K2 
    但是卡K1 对应的单号可能还包含 
    单号  卡考 
    A1    K1 
    A2    K1 
    A3    K1 
    但是卡K2 对应的单号可能还包含 
    单号  卡考 
    A1    K2 
    A4    K2 
    A5    K2 
    同样单A5,可能还对应的卡考是 
    单号  卡考 
    A5    K6 
    A5    K7 ------------------------------------------------------ 
    目标: 
    打算显示单号为A1下面的所有卡号和单号都显示出来,卡号对应的单号也显示出来 
    A1    K1 
    A1    K2 
    A2    K1 
    A3    K1 
    A4    K2 
    A5    K2 
    A5    K6 
    A5    K7 
      

  5.   

    --单和卡是多对多的关系 ,进行关联
    create table TEMP_COMPARE_GP
    (
      AUTO_ID      VARCHAR2(50),
      REL_NO       VARCHAR2(20),   --作业单号码
      NO_COMPLETE  VARCHAR2(4) default 0,   --作业单是否查找完成
      CAR_NO       VARCHAR2(20),    --卡号码
      CAR_COMPLETE VARCHAR2(4) default 0    --卡是否查找完成
    )
    --数据如下:
    A1    K1  0   0
    A8    K8  0   0
    A1    K2  0   0
    A2    K1  0   0 
    A3    K1  0   0 
    A4    K2  0   0 
    A5    K2  0   0 
    A5    K6  0   0 
    A5    K7  0   0
    A9    K9  0   0
    --查询结果
    A1    K1  0   0
    A1    K2  0   0
    A2    K1  0   0 
    A3    K1  0   0 
    A4    K2  0   0 
    A5    K2  0   0 
    A5    K6  0   0 
    A5    K7  0   0--通过递归查询A1对应的所有单子
    --涉及到的存储过程 Get_Weight_Caution_New1_EXT,Get_Weight_Caution_ForCAR,Get_Weight_Caution_ForBILL
    create or replace procedure Get_Weight_Caution_ForCAR(GATEJOB_NO1 in varchar2)
       is
       /*******************************************************************************************  VER        DATE        AUTHOR
      ---------  ----------  ---------------
      1.0        2009-4-20   jack.jia
      根据单子来找卡
      并且把卡考对应的  NO_COMPLETE =1
    *******************************************************************************************/
       begin
          UPDATE TEMP_COMPARE_GP SET No_Complete='1'
         WHERE rel_no=GATEJOB_NO1 and  No_Complete='0';     
         commit;
       end Get_Weight_Caution_ForCAR;create or replace procedure Get_Weight_Caution_ForBILL(CAR_NO1 in varchar2)
       is
      /*******************************************************************************************
      
      VER        DATE        AUTHOR
      ---------  ----------  ---------------
      1.0        2009-4-20   jack.jia
      根据卡来找单子
      并且把卡考对应的 CAR_COMPLETE =1
    *******************************************************************************************/
       begin 
                UPDATE TEMP_COMPARE_GP SET Car_Complete='1'
                WHERE car_no=CAR_NO1 and  Car_Complete='0';
                commit;
       end Get_Weight_Caution_ForBILL;--主存储过程
    create or replace procedure Get_Weight_Caution_New1_EXT(GATEJOB_NO1 in varchar2) iscursor cur_stock is
        select TCG.Rel_No,TCG.Car_No,TCG.No_Complete,TCG.Car_Complete 
             from  TEMP_COMPARE_GP TCG 
             where rel_no=GATEJOB_NO1 and TCG.No_Complete='0';         
        CurRow cur_stock%rowtype;
            
       cursor cur_stock1 is
        select TCG.Rel_No,TCG.Car_No,TCG.No_Complete,TCG.Car_Complete 
             from  TEMP_COMPARE_GP TCG 
             where  TCG.No_Complete='0' AND Car_Complete='1';         
        CurRow1 cur_stock1%rowtype;
        
    begin
      
      
      open Cur_Stock;
        loop
         fetch Cur_Stock
          into CurRow;
          exit when Cur_Stock%notfound;
           --循环调用卡找单子存储过程
           if (CurRow.car_complete='0') then              
               Get_Weight_Caution_ForBILL(CurRow.car_no);
           end if;       
        end loop;
        close Cur_Stock;
      
      
      --单子找卡
      Get_Weight_Caution_ForCAR(GATEJOB_NO1);
      --卡找单子
      
          
             open Cur_Stock1;
             loop
              fetch Cur_Stock1
              into CurRow1;
               exit when Cur_Stock1%notfound;
               Get_Weight_Caution_New1_EXT(CurRow1.Rel_No);
             end loop;
             close Cur_Stock1;
             
        commit;
        
        
         delete from TEMP_COMPARE_GP T where T.NO_COMPLETE='0' and T.CAR_COMPLETE='0'; 
         
      commit;
      
        
      
     end Get_Weight_Caution_New1_EXT;