есть такая табличка
Код: Выделить всё
CREATE TABLE SP_BOM ( - справочник материалов, комплектующих и готовых изделий
C INTEGER,
PART_ID INTEGER,
COMP_ID INTEGER,
COMP_TYPE INTEGER,
PART_QTY NUMERIC(15,5),
COMP_QTY NUMERIC(15,5));
CREATE TABLE MRP ( - потребнось в материалах и запчастях
C INTEGER,
COMPTYPE INTEGER,
LOWLEVEL INTEGER,
ITEM_ID INTEGER,
QTY INTEGER,
ST INTEGER);
Код: Выделить всё
CREATE PROCEDURE FILL_MRP
returns (
name char(100) character set win1251,
comptype integer,
lowlevel integer,
item_id integer,
qty integer,
st integer,
global_id integer)
as
declare variable n integer;
begin
n=0;
global_id=0;
while ( exists(select item_id from mrp where st = 0)) do
begin
/*потребность в материалах*/
for select 1 ,:n, b.comp_id,b.comp_qty*p.qty/b.part_qty,1,sp_parts.name from mrp p
inner join sp_bom b on b.part_id = p.item_id
left join sp_parts on sp_parts.c = b.comp_id
where p.st = 0 and b.comp_type = 1 into :comptype,:lowlevel,:item_id,:qty,:st,:name do
begin
insert into mrp(comptype,lowlevel,item_id,qty,st) values (:comptype,:lowlevel,:item_id,:qty,:st) ;
suspend;
end
/*потребность в комплектующих*/
for select 2,:n+1,b.comp_id,b.comp_qty*p.qty/b.part_qty,0,sp_parts.name
from mrp p inner join sp_bom b on b.part_id = p.item_id
left join sp_parts on sp_parts.c = b.comp_id
where p.st = 0 and b.comp_type = 2 into :comptype,:lowlevel,:item_id,:qty,:st,:name do
begin
insert into mrp(comptype,lowlevel,item_id,qty,st) values (:comptype,:lowlevel,:item_id,:qty,:st) ;
suspend;
global_id=global_id+1;
end
update mrp set st=1 where lowlevel = :n;
n = n+1;
end
end
запускаю просто селектом - почемуто больше значений чем надо.
Почему так она себя ведет?
АНдрей