问题是这样的
有单号 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
有单号 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
单号 卡考
A11 K11
这个没有查询到和单号A1的关联,则不显示出来
for cur in (select * from table where 单号=记录.单号 and 卡号<>记录.卡号)
loop
在总记录集中添加当前记录table%type ,执行p2(当前记录, 总记录集)
end loop;
end p1;p2类似
是array定义,还是执行p2
对应的卡号是
单号 卡考
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
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;