CREATE OR REPLACE PROCEDURE HHPMES."S_CAP_SOP_SIMULATE" (
s_sim_index IN cap_sop_simulate_index.sim_index%TYPE,
s_from_date IN cap_sop_simulate_index.prod_start_date%TYPE,
s_to_date IN cap_sop_simulate_index.prod_start_date%TYPE,
s_plant IN bsc_sect.plant_code%TYPE,
s_analysis_flag IN cap_sop_simulate_index.analysis_method%TYPE,
s_line_flag IN cap_sop_simulate_index.line_type%TYPE,
outmessage OUT VARCHAR2)
IS
h_sim_index cap_sop_prod_line_info.sim_index%TYPE;
h_year_date cap_sop_prod_line_info.year_date%TYPE;
h_sect_code cap_sop_prod_line_info.sect%TYPE;
h_line cap_sop_prod_line_info.shop_code%TYPE;
h_prod_group cap_sop_prod_line_info.prod_group%TYPE;
h_prod_group2 cap_sop_prod_line_info.prod_group%TYPE;
h_time_prod_group cap_sop_prod_line_info.prod_group%TYPE;
h_prod_qty cap_sop_prod_line_info.prod_qty%TYPE;
h_tot_prod_qty cap_sop_prod_line_info.prod_qty%TYPE;
h_change_group_cnt cap_sop_prod_line_info.change_group_cnt%TYPE;
h_change_group_cnt2 cap_sop_prod_line_info.change_group_cnt%TYPE;
h_line_cnt cap_sop_prod_line_info.cell_line_cnt%TYPE;
h_cell_run_line_cnt cap_sop_prod_line_info.cell_run_line_cnt%TYPE;
h_cell_line_cnt cap_sop_prod_line_info.cell_line_cnt%TYPE;
h_cell_line_cnt2 cap_sop_prod_line_info.cell_line_cnt%TYPE;
h_cv_run_line_cnt cap_sop_prod_line_info.cv_run_line_cnt%TYPE;
h_cv_line_cnt cap_sop_prod_line_info.cv_line_cnt%TYPE;
h_cv_line_cnt2 cap_sop_prod_line_info.cv_line_cnt%TYPE;
h_plan_week cap_sop_simulate.plan_week%TYPE;
h_line_plan_week cap_sop_simulate.plan_week%TYPE;
h_cell_time_qty cap_sop_simulate.cell_time_qty%TYPE;
h_cv_time_qty cap_sop_simulate.cv_time_qty%TYPE;
h_cv_line_time_qty cap_sop_prod_line_info.cv_time_qty%TYPE;
h_cell_line_time_qty cap_sop_prod_line_info.cv_time_qty%TYPE;
h_depart_cell bsc_sect.depart_code%TYPE;
h_sect_cell cap_sop_prod_line_info.sect%TYPE;
h_line_cell cap_sop_prod_line_info.shop_code%TYPE;
h_depart_cv bsc_sect.depart_code%TYPE;
h_sect_cv cap_sop_prod_line_info.sect%TYPE;
h_line_cv cap_sop_prod_line_info.shop_code%TYPE;
h_line_type bsc_line.line_category%TYPE;
h_analysis_flag cap_sop_simulate_index.analysis_method%TYPE;
h_line_flag cap_sop_simulate_index.line_type%TYPE;
h_term_flag cap_sop_simulate_index.term_flag%TYPE;
h_plan_start_week cap_sop_simulate_index.plan_start_week%TYPE;
h_plan_end_week cap_sop_simulate_index.plan_end_week%TYPE;
h_max_week bsc_week_info.week_code%TYPE;
h_work_time NUMBER(12);
h_loss_time NUMBER(12);
h_time_prod_qty NUMBER(12);
CURSOR cur_cap_sop_prod_line_info IS
SELECT a.year_date, a.sect,a.shop_code, a.line_category, a.prod_group,
a.prod_qty, b.tot_prod_qty,
round(decode(b.tot_prod_qty,0,0,a.prod_qty/b.tot_prod_qty),1) rate,a.change_group_cnt,
decode((a.work_time -a.loss_time),0,0, round(a.prod_qty *60 /(a.work_time -a.loss_time),0)) time_qty
FROM
(SELECT substr(v.year_week,0,4) year_date,decode(w.line_category,'C','C','V') line_category,
v.sect,v.shop_code, nvl(v.prod_group,'ETC') prod_group,
nvl(sum(v.prod_qty),0) prod_qty, max(v.change_group) change_group_cnt,
sum(nvl(v.loss_time,0)) loss_time, sum(nvl(v.access_time,0)) work_time
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND d.outgoing = 'Y'
AND p.outgoing = 'Y'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , decode(w.line_category,'C','C','V'), v.sect,v.shop_code,nvl(v.prod_group,'ETC')
) A,
(SELECT substr(v.year_week,0,4) year_date, decode(w.line_category,'C','C','V') line_category, v.sect,v.shop_code,
nvl(sum(v.prod_qty),0) tot_prod_qty
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND d.outgoing = 'Y'
AND p.outgoing = 'Y'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , decode(w.line_category,'C','C','V'),v.sect,v.shop_code)B
WHERE a.sect = b.sect
AND a.shop_code = b.shop_code
AND a.year_date = b.year_date
AND a.line_category = b.line_category ;
CURSOR cur_cap_sop_simulate IS
SELECT distinct v.year_date year_date, v.plan_week year_week,
nvl(v.prod_group,'ETC')
FROM cap_sop_prod_line_info v
WHERE v.sim_index = s_sim_index
;
/* SELECT substr(v.year_week,0,4) year_date, substr(v.year_week,5,2) year_week,
nvl(v.prod_group,'ETC')
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND d.outgoing = 'Y'
AND p.outgoing = 'Y'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , substr(v.year_week,5,2) ,
nvl(v.prod_group,'ETC')
;
*/
CURSOR cur_cap_sop_simulate_pcb IS
SELECT substr(v.year_week,0,4) year_date, substr(v.year_week,5,2) year_week,
nvl(v.prod_group,'ETC')
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
--AND d.outgoing = 'Y'
AND p.outgoing = 'N'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , substr(v.year_week,5,2) ,
nvl(v.prod_group,'ETC')
;
CURSOR cur_line_rate IS
SELECT a.year_date, a.sect,a.shop_code, a.prod_group,
a.prod_qty, b.tot_prod_qty,
round(decode(b.tot_prod_qty,0,0,a.prod_qty/b.tot_prod_qty),3) rate
FROM
(SELECT substr(v.year_week,0,4) year_date, v.sect,v.shop_code, nvl(v.prod_group,'ETC') prod_group,
nvl(sum(v.prod_qty),0) prod_qty
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND d.outgoing = 'Y'
AND p.outgoing = 'Y'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , v.sect,v.shop_code,nvl(v.prod_group,'ETC')
) A,
(SELECT substr(v.year_week,0,4) year_date, v.sect,v.shop_code,
nvl(sum(v.prod_qty),0) tot_prod_qty
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND d.outgoing = 'Y'
AND p.outgoing = 'Y'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , v.sect,v.shop_code)B
WHERE a.sect = b.sect
AND a.shop_code = b.shop_code
AND a.year_date = b.year_date ;
CURSOR cur_line_rate_pcb IS
SELECT a.year_date, a.sect,a.shop_code, a.prod_group,
a.prod_qty, b.tot_prod_qty,
round(decode(b.tot_prod_qty,0,0,a.prod_qty/b.tot_prod_qty),3) rate,a.change_group_cnt,
round(a.prod_qty *60 /(a.work_time -a.loss_time),0) time_qty
FROM
(SELECT substr(v.year_week,0,4) year_date,
v.sect,v.shop_code, nvl(v.prod_group,'ETC') prod_group,
nvl(sum(v.prod_qty),0) prod_qty, max(v.change_group) change_group_cnt,
sum(nvl(v.loss_time,0)) loss_time, sum(nvl(v.access_time,0)) work_time
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND p.outgoing = 'N'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , v.sect,v.shop_code,nvl(v.prod_group,'ETC')
) A,
(SELECT substr(v.year_week,0,4) year_date, v.sect,v.shop_code,
nvl(sum(v.prod_qty),0) tot_prod_qty
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND p.outgoing = 'N'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY substr(v.year_week,0,4) , v.sect,v.shop_code)B
WHERE a.sect = b.sect
AND a.shop_code = b.shop_code
AND a.year_date = b.year_date ;
CURSOR cur_plan_week IS
SELECT a.YEAR , a.YEAR||a.WEEK_CODE PLAN_WEEK , a.year_MONTH
FROM BSC_WEEK_INFO a, CAP_SOP_SIMULATE_INDEX b
WHERE b.SIM_INDEX =h_sim_index
AND a.YEAR||a.WEEK_CODE BETWEEN b.PLAN_START_WEEK AND b.PLAN_END_WEEK
order by a.YEAR , a.YEAR||a.WEEK_CODE
;
CURSOR cur_line_time_qty IS
SELECT pdm.line_category, pdm.prod_group,
nvl(sum(pdm.prod_qty),0) prod_qty,
nvl(sum(pdm.loss_time),0) loss_time,
nvl(sum(pdm.work_time),0) work_time
FROM (
SELECT decode(w.line_category,'C','C','V') line_category,
nvl(v.prod_group,'ETC') prod_group,
nvl(sum(v.prod_qty),0) prod_qty,
sum(nvl(v.loss_time,0)) loss_time, sum(nvl(v.access_time,0)) work_time
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND d.outgoing = 'Y'
AND p.outgoing = 'Y'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND nvl(v.prod_group,'ETC') = h_prod_group
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY decode(w.line_category,'C','C','V'), nvl(v.prod_group,'ETC')
)PDM
GROUP BY pdm.line_category, pdm.prod_group;
BEGIN
IF (s_sim_index = '') OR (s_sim_index IS NULL) THEN
RETURN;
ELSE
h_sim_index := s_sim_index ;
END IF;
IF (s_line_flag = '') OR (s_line_flag IS NULL) THEN
RETURN;
ELSE
h_line_flag := s_line_flag ;
END IF;
BEGIN
DELETE CAP_SOP_PROD_LINE_INFO
WHERE SIM_INDEX = h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
BEGIN
DELETE CAP_SOP_SIMULATE
WHERE SIM_INDEX = h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END;
BEGIN
select max(week_code)
INTO h_max_week
from bsc_week_info a, CAP_SOP_SIMULATE_INDEX b
where b.SIM_INDEX =h_sim_index
and a.YEAR = substr(b.PLAN_START_WEEK,0,4);
EXCEPTION
WHEN OTHERS THEN
h_plan_week := 0 ;
RETURN ;
END;
IF h_line_flag = 'M' THEN
BEGIN
SELECT TERM_FLAG
INTO h_term_flag
FROM CAP_SOP_SIMULATE_INDEX
WHERE SIM_INDEX =h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
h_term_flag := 'M' ;
RETURN ;
END;
IF h_term_flag ='W' THEN
BEGIN
SELECT PLAN_START_WEEK , PLAN_END_WEEK
INTO h_plan_start_week, h_plan_end_week
FROM CAP_SOP_SIMULATE_INDEX
WHERE SIM_INDEX =h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
h_plan_start_week := 0 ;
h_plan_end_week := 0 ;
RETURN ;
END;
ELSE
BEGIN
SELECT MIN(A.YEAR_MONTH), MAX(A.YEAR_MONTH)
INTO h_plan_start_week, h_plan_end_week
FROM BSC_WEEK_INFO A, CAP_SOP_SIMULATE_INDEX B
WHERE A.YEAR||A.WEEK_CODE BETWEEN B.PLAN_START_WEEK AND B.PLAN_END_WEEK
AND B.SIM_INDEX =h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
h_plan_start_week := 0 ;
h_plan_end_week := 0 ;
RETURN ;
END;
END IF;
IF h_plan_start_week < h_plan_end_week THEN
LOOP
OPEN cur_cap_sop_prod_line_info ;
LOOP
FETCH cur_cap_sop_prod_line_info
INTO h_year_date, h_sect_code, h_line, h_line_type, h_prod_group, h_prod_qty, h_tot_prod_qty, h_line_cnt, h_change_group_cnt, h_cv_line_time_qty ;
EXIT WHEN cur_cap_sop_prod_line_info%NOTFOUND;
BEGIN
IF h_line_type ='C' THEN
BEGIN
UPDATE CAP_SOP_PROD_LINE_INFO
SET PROD_QTY = h_prod_qty,
CELL_LINE_CNT = h_line_cnt,
CHANGE_GROUP_CNT = h_change_group_cnt,
CELL_RUN_LINE_CNT = h_line_cnt*h_change_group_cnt,
CELL_LINE_APPLIED_CNT = h_line_cnt*h_change_group_cnt,
CELL_TIME_QTY = h_cv_line_time_qty,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = substr(h_plan_start_week,0,4)
AND SECT = h_sect_code
AND SHOP_CODE = h_line
AND PROD_GROUP = h_prod_group
AND PLAN_WEEK = substr(h_plan_start_week,5,2)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
IF sql%rowcount = 0 THEN
BEGIN
INSERT INTO CAP_SOP_PROD_LINE_INFO
(SIM_INDEX, YEAR_DATE, PLAN_WEEK, SECT, SHOP_CODE, PROD_GROUP, PROD_QTY, CHANGE_GROUP_CNT, CELL_LINE_CNT, CELL_RUN_LINE_CNT, CELL_TIME_QTY, CELL_LINE_APPLIED_CNT, INSERT_DATE)
VALUES (h_sim_index, substr(h_plan_start_week,0,4),substr(h_plan_start_week,5,2),h_sect_code,h_line, h_prod_group,h_prod_qty,h_change_group_cnt,h_line_cnt, h_line_cnt*h_change_group_cnt,h_cv_line_time_qty,h_line_cnt*h_change_group_cnt,
sysdate)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
END IF ;
ELSE
BEGIN
UPDATE CAP_SOP_PROD_LINE_INFO
SET PROD_QTY = h_prod_qty,
CV_LINE_CNT = h_line_cnt,
CHANGE_GROUP_CNT = h_change_group_cnt,
CV_RUN_LINE_CNT = h_line_cnt*h_change_group_cnt,
CV_LINE_APPLIED_CNT = h_line_cnt*h_change_group_cnt,
CV_TIME_QTY = h_cv_line_time_qty,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = substr(h_plan_start_week,0,4)
AND SECT = h_sect_code
AND SHOP_CODE = h_line
AND PROD_GROUP = h_prod_group
AND PLAN_WEEK = substr(h_plan_start_week,5,2)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
IF sql%rowcount = 0 THEN
BEGIN
INSERT INTO CAP_SOP_PROD_LINE_INFO
(SIM_INDEX,YEAR_DATE,PLAN_WEEK,SECT,SHOP_CODE,PROD_GROUP,PROD_QTY, CHANGE_GROUP_CNT,CV_LINE_CNT,CV_RUN_LINE_CNT, CV_TIME_QTY,CV_LINE_APPLIED_CNT, INSERT_DATE)
VALUES (h_sim_index,substr(h_plan_start_week,0,4),substr(h_plan_start_week,5,2),h_sect_code,h_line,h_prod_group,h_prod_qty,h_change_group_cnt,h_line_cnt,h_line_cnt*h_change_group_cnt,h_cv_line_time_qty,h_line_cnt*h_change_group_cnt,
sysdate)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
END IF ;
END IF ;
END ;
END LOOP;
CLOSE cur_cap_sop_prod_line_info;
h_plan_start_week := h_plan_start_week + 1;
IF h_term_flag ='M' THEN
IF substr(h_plan_start_week,5,2) = 13 THEN
h_plan_start_week := (substr(h_plan_start_week,0,4) + 1) || '01';
END IF;
ELSE
IF substr(h_plan_start_week,5,2) > h_max_week THEN
h_plan_start_week := (substr(h_plan_start_week,0,4) + 1) || '01';
END IF;
END IF;
-- dbms_output.put_line('<<||YYYYYYYYYYYY========'||h_plan_start_week);
IF h_plan_start_week > h_plan_end_week THEN
EXIT;
END IF;
END LOOP;
END IF;
COMMIT WORK;
OPEN cur_cap_sop_simulate ;
LOOP
FETCH cur_cap_sop_simulate
INTO h_year_date, h_plan_week, h_prod_group;
EXIT WHEN cur_cap_sop_simulate%NOTFOUND;
IF (s_analysis_flag = '') OR (s_analysis_flag IS NULL) THEN
RETURN;
ELSE
h_analysis_flag := s_analysis_flag ;
END IF;
BEGIN
INSERT INTO CAP_SOP_SIMULATE
(SIM_INDEX,YEAR_DATE,PLAN_WEEK,PROD_GROUP, INSERT_DATE)
VALUES (h_sim_index,h_year_date,h_plan_week,h_prod_group, sysdate)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
BEGIN
SELECT sum( CV_LINE_CNT), sum(CV_RUN_LINE_CNT),sum(CELL_LINE_CNT), sum( CELL_RUN_LINE_CNT)
INTO h_cv_line_cnt2,h_cv_run_line_cnt,h_cell_line_cnt2,h_cell_run_line_cnt
FROM (SELECT distinct shop_code, CV_LINE_CNT, CV_RUN_LINE_CNT, CELL_LINE_CNT,CELL_RUN_LINE_CNT
FROM CAP_SOP_PROD_LINE_INFO
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = h_year_date
AND PROD_GROUP = h_prod_group
)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
RETURN ;
END ;
-- dbms_output.put_line(h_plan_week||'PROD_GROUP>>'||h_time_prod_group||'<<||h_cell_run_line_cnt========'||h_cell_run_line_cnt);
BEGIN
UPDATE CAP_SOP_SIMULATE
SET CELL_RUN_LINE_CNT = h_cell_run_line_cnt,
CELL_LINE_CNT = h_cell_line_cnt2,
CV_RUN_LINE_CNT = h_cv_run_line_cnt,
CV_LINE_CNT = h_cv_line_cnt2,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = h_year_date
AND PROD_GROUP = h_prod_group
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
/*=G@{,@/=G,@[>w=C0#18GT*/
OPEN cur_line_time_qty;
LOOP
FETCH cur_line_time_qty
INTO h_line_type, h_time_prod_group, h_time_prod_qty, h_loss_time, h_work_time;
EXIT WHEN cur_line_time_qty%NOTFOUND;
IF h_line_type ='C' THEN
IF h_analysis_flag ='A' THEN
IF (h_work_time - h_loss_time) <= 0 or h_time_prod_qty = 0 or h_work_time = 0 or h_time_prod_qty is null or h_work_time is null THEN
h_cell_time_qty := 0;
ELSE
h_cell_time_qty := round(h_time_prod_qty *60 /(h_work_time - h_loss_time) ,0);
END IF;
IF h_cell_time_qty < 0 THEN
h_cell_time_qty := 0;
END IF;
ELSE
IF h_time_prod_qty = 0 or h_work_time = 0 or h_time_prod_qty is null or h_work_time is null THEN
h_cell_time_qty := 0;
ELSE
h_cell_time_qty := round((h_time_prod_qty*60)/h_work_time,0) ;
END IF;
END IF;
-- dbms_output.put_line(h_plan_week||'PROD_GROUP>>'||h_time_prod_group||'<<||h_cv_time_qty========'||h_cell_time_qty);
BEGIN
UPDATE CAP_SOP_SIMULATE
SET CELL_TIME_QTY = h_cell_time_qty,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = h_year_date
AND PLAN_WEEK = h_plan_week
AND PROD_GROUP = h_time_prod_group
;
EXCEPTION
WHEN OTHERS THEN
outmessage := 'ERROR' ;
ROLLBACK ;
RETURN ;
END ;
ELSE
IF h_analysis_flag ='A' THEN
IF (h_work_time - h_loss_time) <= 0 or h_time_prod_qty = 0 or h_work_time = 0 or h_time_prod_qty is null or h_work_time is null THEN
h_cv_time_qty := 0;
ELSE
h_cv_time_qty := round(h_time_prod_qty *60 /(h_work_time - h_loss_time) ,0);
END IF;
IF h_cv_time_qty < 0 THEN
h_cv_time_qty := 0;
END IF;
ELSE
IF h_time_prod_qty = 0 or h_work_time = 0 or h_time_prod_qty is null or h_work_time is null THEN
h_cv_time_qty := 0;
ELSE
h_cv_time_qty := round((h_time_prod_qty*60)/h_work_time,0) ;
END IF;
END IF;
BEGIN
UPDATE CAP_SOP_SIMULATE
SET CV_TIME_QTY = h_cv_time_qty,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = h_year_date
AND PLAN_WEEK = h_plan_week
AND PROD_GROUP = h_time_prod_group
;
EXCEPTION
WHEN OTHERS THEN
outmessage := 'ERROR' ;
ROLLBACK ;
RETURN ;
END ;
END IF;
END LOOP;
CLOSE cur_line_time_qty;
END LOOP;
CLOSE cur_cap_sop_simulate;
COMMIT WORK;
ELSE
BEGIN
SELECT TERM_FLAG
INTO h_term_flag
FROM CAP_SOP_SIMULATE_INDEX
WHERE SIM_INDEX =h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
h_term_flag := 'M' ;
RETURN ;
END;
IF h_term_flag ='W' THEN
BEGIN
SELECT PLAN_START_WEEK , PLAN_END_WEEK
INTO h_plan_start_week, h_plan_end_week
FROM CAP_SOP_SIMULATE_INDEX
WHERE SIM_INDEX =h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
h_plan_start_week := 0 ;
h_plan_end_week := 0 ;
RETURN ;
END;
ELSE
BEGIN
SELECT MIN(A.YEAR_MONTH), MAX(A.YEAR_MONTH)
INTO h_plan_start_week, h_plan_end_week
FROM BSC_WEEK_INFO A, CAP_SOP_SIMULATE_INDEX B
WHERE A.YEAR||A.WEEK_CODE BETWEEN B.PLAN_START_WEEK AND B.PLAN_END_WEEK
AND B.SIM_INDEX =h_sim_index
;
EXCEPTION
WHEN OTHERS THEN
h_plan_start_week := 0 ;
h_plan_end_week := 0 ;
RETURN ;
END;
END IF;
IF h_plan_start_week < h_plan_end_week THEN
LOOP
OPEN cur_line_rate_pcb ;
LOOP
FETCH cur_line_rate_pcb
INTO h_year_date,h_sect_code,h_line,h_prod_group,h_prod_qty,h_tot_prod_qty,h_line_cnt,h_change_group_cnt,h_cv_line_time_qty;
EXIT WHEN cur_line_rate_pcb%NOTFOUND;
-- dbms_output.put_line('<<||h_prod_group======='||h_prod_group||'<<||h_line_cnt======='||h_line_cnt);
BEGIN
BEGIN
UPDATE CAP_SOP_PROD_LINE_INFO
SET PROD_QTY = h_prod_qty,
CV_LINE_CNT = h_line_cnt,
CHANGE_GROUP_CNT = h_change_group_cnt,
CV_RUN_LINE_CNT = h_line_cnt*h_change_group_cnt,
CV_LINE_APPLIED_CNT = h_line_cnt*h_change_group_cnt,
CV_TIME_QTY = h_cv_line_time_qty,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = substr(h_plan_start_week,0,4)
AND SECT = h_sect_code
AND SHOP_CODE = h_line
AND PROD_GROUP = h_prod_group
AND PLAN_WEEK = substr(h_plan_start_week,5,2)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
IF sql%rowcount = 0 THEN
BEGIN
INSERT INTO CAP_SOP_PROD_LINE_INFO
(SIM_INDEX,YEAR_DATE,PLAN_WEEK, SECT,SHOP_CODE,PROD_GROUP,PROD_QTY, CV_LINE_CNT,CHANGE_GROUP_CNT, CV_RUN_LINE_CNT,CV_TIME_QTY,CV_LINE_APPLIED_CNT, INSERT_DATE)
VALUES (h_sim_index,substr(h_plan_start_week,0,4),substr(h_plan_start_week,5,2),h_sect_code,h_line,h_prod_group,h_prod_qty,h_line_cnt,h_change_group_cnt,h_line_cnt*h_change_group_cnt,h_cv_line_time_qty,h_line_cnt*h_change_group_cnt,
sysdate)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
END IF ;
END ;
END LOOP;
CLOSE cur_line_rate_pcb;
h_plan_start_week := h_plan_start_week + 1;
IF h_term_flag ='M' THEN
IF substr(h_plan_start_week,5,2) = 13 THEN
h_plan_start_week := (substr(h_plan_start_week,0,4) + 1) || '01';
END IF;
ELSE
IF substr(h_plan_start_week,5,2) > h_max_week THEN
h_plan_start_week := (substr(h_plan_start_week,0,4) + 1) || '01';
END IF;
END IF;
-- dbms_output.put_line('<<||PCBPCB======='||h_plan_start_week);
IF h_plan_start_week > h_plan_end_week THEN
EXIT;
END IF;
END LOOP;
END IF;
COMMIT WORK;
-- dbms_output.put_line('<<||eroereorere');
OPEN cur_cap_sop_simulate ;
LOOP
FETCH cur_cap_sop_simulate
INTO h_year_date,h_plan_week,h_prod_group;
EXIT WHEN cur_cap_sop_simulate%NOTFOUND;
BEGIN
INSERT INTO CAP_SOP_SIMULATE
(SIM_INDEX,YEAR_DATE,PLAN_WEEK,PROD_GROUP, INSERT_DATE)
VALUES (h_sim_index,h_year_date,h_plan_week,h_prod_group, sysdate)
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
BEGIN
BEGIN
SELECT sum( CV_LINE_CNT), sum( CV_RUN_LINE_CNT)
INTO h_cv_line_cnt2,h_cv_run_line_cnt
FROM (SELECT SHOP_CODE, CV_LINE_CNT, CV_RUN_LINE_CNT
FROM CAP_SOP_PROD_LINE_INFO
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = h_year_date
AND PROD_GROUP = h_prod_group)
-- GROUP BY PROD_GROUP
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
RETURN ;
END ;
UPDATE CAP_SOP_SIMULATE
SET
CV_RUN_LINE_CNT = h_cv_run_line_cnt,
CV_LINE_CNT = h_cv_line_cnt2,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = h_year_date
AND PROD_GROUP = h_prod_group
;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
ROLLBACK ;
RETURN ;
END ;
IF (s_analysis_flag = '') OR (s_analysis_flag IS NULL) THEN
RETURN;
ELSE
h_analysis_flag := s_analysis_flag ;
END IF;
/*=G@{,@/=G,@[>w=C0#18GT*/
BEGIN
SELECT pdm.line_category, pdm.prod_group,
nvl(sum(pdm.prod_qty),0) prod_qty,
nvl(sum(pdm.loss_time),0) loss_time,
nvl(sum(pdm.work_time),0) work_time
INTO h_line_type, h_time_prod_group, h_time_prod_qty, h_loss_time, h_work_time
FROM (
SELECT decode(w.line_category,'C','C','V') line_category,
nvl(v.prod_group,'ETC') prod_group,
nvl(sum(v.prod_qty),0) prod_qty,
sum(nvl(v.loss_time,0)) loss_time, sum(nvl(v.access_time,0)) work_time
FROM pac_day_mdl_perfmc v,bsc_depart d,bsc_sect p,bsc_line w,bsc_route r
WHERE v.sect = p.sect
AND p.depart_code = d.depart_code
AND v.sect = w.sect
AND v.shop_code = w.shop_code
AND v.sect = r.sect
AND v.shop_code = r.shop_code
AND v.route_code = r.route_code
AND v.sect in (select sect from bsc_sect
where plant_code = s_plant)
AND p.outgoing = 'N'
AND w.outgoing = 'Y'
AND r.outgoing = 'Y'
AND v.work_date between s_from_date and s_to_date
AND nvl(v.prod_group,'ETC') = h_prod_group
AND v.analysis_flag like 'Y'
AND 0 < ( SELECT decode('%','%',1,count(*))
FROM bsc_line_type_hist lt
WHERE lt.sect = v.sect
AND lt.shop_code = v.shop_code
AND lt.line_category like '%'
AND v.work_date between start_date and end_date)
GROUP BY decode(w.line_category,'C','C','V'), nvl(v.prod_group,'ETC')
)PDM
GROUP BY pdm.line_category, pdm.prod_group;
EXCEPTION
WHEN OTHERS THEN
outmessage := sqlerrm ;
RETURN ;
END;
IF h_analysis_flag ='A' THEN
IF (h_work_time - h_loss_time) <= 0 or h_time_prod_qty = 0 or h_work_time = 0 or h_time_prod_qty is null or h_work_time is null THEN
h_cv_time_qty := 0;
ELSE
h_cv_time_qty := round(h_time_prod_qty *60 /(h_work_time - h_loss_time) ,0);
END IF;
IF h_cv_time_qty < 0 THEN
h_cv_time_qty := 0;
END IF;
ELSE
IF h_time_prod_qty = 0 or h_work_time = 0 or h_time_prod_qty is null or h_work_time is null THEN
h_cv_time_qty := 0;
ELSE
h_cv_time_qty := round((h_time_prod_qty*60)/h_work_time,0) ;
END IF;
END IF;
BEGIN
UPDATE CAP_SOP_SIMULATE
SET CV_TIME_QTY = h_cv_time_qty,
UPDATE_DATE = sysdate
WHERE SIM_INDEX = h_sim_index
AND YEAR_DATE = h_year_date
AND PLAN_WEEK = h_plan_week
AND PROD_GROUP = h_time_prod_group
;
EXCEPTION
WHEN OTHERS THEN
outmessage := 'ERROR' ;
ROLLBACK ;
RETURN ;
END ;
END LOOP;
CLOSE cur_cap_sop_simulate;
COMMIT WORK;
END IF;
END s_cap_sop_simulate;
/
来源:https://www.cnblogs.com/jianwuyin/archive/2009/09/08/1562720.html