12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- drop procedure if exists stock_io_sync;
- DELIMITER //
- create procedure stock_io_sync( _sdate varchar(8), _edate varchar(8) )
- SQL SECURITY INVOKER
- BEGIN
- Declare _line_id int;
- Declare _not_found boolean;
- Declare _line_cur_sales cursor for
- select sabd.id
- from dbr_sorder as sohd
- inner join dbr_sorder_bd as sobd on sohd.id = sobd.sorder_id
- inner join dbr_sales_bd as sabd on sobd.id = sabd.sorder_bd_id
- inner join dbr_sales as sahd on sahd.id = sabd.sales_id
- where sales_date between _sdate and _edate
- order by sales_date asc, sabd.id asc;
- Declare _line_cur_purch cursor for
- select pubd.id
- from dbr_porder as pohd
- inner join dbr_porder_bd as pobd on pohd.id = pobd.porder_id
- inner join dbr_purch_bd as pubd on pobd.id = pubd.porder_bd_id
- inner join dbr_purch as puhd on puhd.id = pubd.purch_id
- where purch_date between _sdate and _edate
- order by purch_date asc, pubd.id asc;
- Declare _line_cur_genio cursor for
- select gnbd.id
- from dbr_genio as gnhd
- inner join dbr_genio_bd as gnbd on gnhd.id = gnbd.genio_id
- where genio_date between _sdate and _edate
- order by genio_date asc, gnbd.id asc;
- Declare continue handler for
- not found set _not_found = true;
- delete from dbr_stock_io where io_date between _sdate and _edate;
- set _not_found = false; -- 이것이 Multi cursor를 쓰는 핵심이다.
- open _line_cur_sales;
- loop_sales: loop
- fetch _line_cur_sales into _line_id;
- if _not_found then leave loop_sales; end if;
- call stock_io_act('sales', _line_id, 0);
- end loop loop_sales;
- close _line_cur_sales;
- set _not_found = false; -- 이것이 Multi cursor를 쓰는 핵심이다.
- open _line_cur_purch;
- loop_purch: loop
- fetch _line_cur_purch into _line_id;
- if _not_found then leave loop_purch; end if;
- call stock_io_act('purch', _line_id, 0);
- end loop loop_purch;
- close _line_cur_purch;
- set _not_found = false; -- 이것이 Multi cursor를 쓰는 핵심이다.
- open _line_cur_genio;
- loop_genio: loop
- fetch _line_cur_genio into _line_id;
- if _not_found then leave loop_genio; end if;
- call stock_io_act('genio', _line_id, 0);
- end loop loop_genio;
- close _line_cur_genio;
- END;
- //
- DELIMITER ;
|