Здравствуйте, aleksataras, Вы писали:
A> есть процедура
A>create or replace procedure insert_into_total
A>(vn_ev_date date,
A>vn_ch_name long,
A>vn_ev_type long,
A>vn_ev_total number) IS
A>v_total number;
A>v_rowid long;
A>begin
A>select max (rowid) into v_rowid from ev_ctu where ch_name = vn_ch_name and ev_type = vn_ev_type;
A> if v_rowid <> null then
A> select ev_total into v_total from ev_ctu where rowid = v_rowid;
A> if vn_ev_total >= v_total then
A> insert into total_ctu values
A> (vn_ev_date,
A> vn_ch_name,
A> vn_ev_type,
A> (vn_ev_total - v_total));
A> else
A> insert into total_ctu values
A> (vn_ev_date,
A> vn_ch_name,
A> vn_ev_type,
A> vn_ev_total);
A> end if;
A> else
A> insert into total_ctu values
A> (vn_ev_date,
A> vn_ch_name,
A> vn_ev_type,
A> vn_ev_total);
A> end if;
A>end insert_into_total;
A>/
У тебя v_rowid <> null всегда вычислится в false и, следовательно select ev_total into v_total from ev_ctu не выполнится. А, значит, vn_ev_total >= v_total тоже вычислится в false и будет выполняться только блок else.
Здравствуйте, hagane, Вы писали:
H>Здравствуйте, aleksataras, Вы писали:
A>> есть процедура
H>A>>create or replace procedure insert_into_total
A>>(vn_ev_date date,
A>>vn_ch_name long,
A>>vn_ev_type long,
A>>vn_ev_total number) IS
A>>v_total number;
A>>v_rowid long;
A>>begin
A>>select max (rowid) into v_rowid from ev_ctu where ch_name = vn_ch_name and ev_type = vn_ev_type;
A>> if v_rowid <> null then
A>> select ev_total into v_total from ev_ctu where rowid = v_rowid;
A>> if vn_ev_total >= v_total then
A>> insert into total_ctu values
A>> (vn_ev_date,
A>> vn_ch_name,
A>> vn_ev_type,
A>> (vn_ev_total - v_total));
A>> else
A>> insert into total_ctu values
A>> (vn_ev_date,
A>> vn_ch_name,
A>> vn_ev_type,
A>> vn_ev_total);
A>> end if;
A>> else
A>> insert into total_ctu values
A>> (vn_ev_date,
A>> vn_ch_name,
A>> vn_ev_type,
A>> vn_ev_total);
A>> end if;
A>>end insert_into_total;
A>>/
H>
H>У тебя v_rowid <> null всегда вычислится в false и, следовательно select ev_total into v_total from ev_ctu не выполнится. А, значит, vn_ev_total >= v_total тоже вычислится в false и будет выполняться только блок else.
это конечно хорошо, но я как раз и спрашивал, как мне сделать так чтобы v_rowid <> null НЕ вычислялся в false ))). Проблему решил, подсказали — v_rowid is not null;