In Interbase 2009 db I have master and detail tables(Tmaster, Tdetails).
Tmaster:
master_id(pk) | DocSumma | DocSummaDol |
---|
Tdetails:
det_id | master_id(fk) | price1,price2 | qnt |
---|
After I delete/update records in child table(Tdetails) procedure must update summa in master table(Tmaster).
I have 2 problems:
- If procedure contains this if-clause:
if (m.DocSumma=0) then begin delete from Tmaster m where m.master_id=:master_id; end
it returns this error:
Column does not belong to referenced table. Dynamic SQL Error. SQL error code = -206. Column unknown.
- Without if-clause I have the second problem: procedure works very slow. It would be end after 13hrs :)
Sometimes in IBExpert I get this error:
Arithmetic overflow or division by zero has occurred. arithmetic exception, numeric overflow, or string truncation. SQLCODE: -802 GDSCODE: 335544321
what is wrong in my Psql code?
alter procedure sp_recalculate_summa
as
declare variable master_id integer;
declare variable det_id integer;
declare variable sum1 decimal(8,4) ;
declare variable sum2 decimal(8,4) ;
begin
for select m.master_id
from Tmaster m
into :master_id
do begin
sum1=0;
sum2=0;
for select det_id,
sum(d.price1*d.qnt)as summa1,
sum(d.price2*d.qnt)as summa2
from Tdetails d, Tmaster m
where d.det_id=:master_id
group by det_id
into :det_id,:sum1,:sum2
do
if (m.DocSumma=0) then begin
delete from Tmaster m where m.master_id=:master_id;
end
Else begin
update Tmaster set DocSumma=:sum1 where master_id=:master_id;
update Tmaster set DocSummaDol=:sum2 where master_id=:master_id;
end
end
end