![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранимая процедура [IB6.x]
Пользователь © (2002-05-21 09:49:00)IB6
ПОдскажите кде ошибка?
Не вставляються данные
в выборку они попадают, расчитываються а запись их не происходит
CREATE PROCEDURE RASCHET (
DATARAS DATE,
DATANACH DATE)
AS
DECLARE VARIABLE A NUMERIC(10,2);
DECLARE VARIABLE C NUMERIC(10,2);
DECLARE VARIABLE D NUMERIC(10,2);
DECLARE VARIABLE E NUMERIC(10,2);
DECLARE VARIABLE F NUMERIC(10,2);
DECLARE VARIABLE G NUMERIC(10,2);
DECLARE VARIABLE H NUMERIC(10,2);
DECLARE VARIABLE I NUMERIC(10,2);
DECLARE VARIABLE J NUMERIC(10,2);
DECLARE VARIABLE M NUMERIC(10,2);
DECLARE VARIABLE N NUMERIC(10,2);
DECLARE VARIABLE KODR INTEGER;
DECLARE VARIABLE KOD INTEGER;
DECLARE VARIABLE B INTEGER;
DECLARE VARIABLE ARSUB NUMERIC(10,2);
DECLARE VARIABLE SUMRAS NUMERIC(10,2);
DECLARE VARIABLE SUMAR NUMERIC(10,2);
DECLARE VARIABLE SUMSYB NUMERIC(10,2);
begin
delete from lschet where datanash=:dataras;
suspend;
for select kodarenda,
area, /* a */
kizn, /* c */
kmat, /* d */
ktipzd, /* e */
kkomf, /* f */
ktehob, /* g */
kraion, /* h */
kisparob, /* i */
ksubar, /* j */
stavka, /* m */
stavkamin /* n */
from arenda
where :DATARAS <= srokend and :DATAnach >= srokstart /*определить диапазон дат */
into :kodr,:a,:c,:d,:e,:f,:g,:h,:i,:j,:m,:n
do begin
/* проверка на субаренду */
select kodsubar from subar
where kodarenda=:kodr
into :b;
if (:b is not null) then
begin
select areasub from subar
where kodsubar=:b and :DATARAS<=dataend and :DATAnach>=datastart /*определить диапазон дат */
into :arsub;
end
else arsub=0;
/* расчет суммы */
if (:arsub=0) then
sumras=:m*:c*:d*:e*(:f+:g)*:h*:i*:a;
else
begin
sumar=:m*:c*:d*:e*(:f+:g)*:h*:i*(:a-:arsub);
sumsyb=:arsub*:j;
sumras=sumar+sumsyb;
end
/* вставляем расчетные данные */
kod=gen_id(newlschet,1);
insert into lschet (kodlschet,kodarenda,symma,datanash)
values(:kod,:kodr,:sumras,:DATARAS);
end
end
Awex (2002-05-21 16:08:00) [1]delete from lschet where datanash=:dataras;
>>>suspend;
Обясните зачем сдесь это ?
kaif (2002-05-21 14:31:00) [2]Если какой-то из IF-ов, например
if (:arsub=0) then
содержит сравнение с NULL, то это может не сработать, так как любое сранение с NULL дает False.
Аккуратно проверь все IF-ы
Johnmen (2002-05-21 10:10:00) [3]>>> sumras=sumar+sumsyb;
sumras=:sumar+:sumsyb;