Hello, All!
В процессе разговоров в аське возник такой вопрос - что будет возвращать
запрос, если внутри него, подзапросом, изменять одно из выбираемых полей?
У оппонента Оракл, который умельцев с такими конструкциями посылает, далеко
и надежно. Высказав свое фу необходимости таких конструкций и убогости
Оракла их не позволяющего :),
делаем тестовую табличку, простую процедуру апдейта и пишем запрос
select
t.w, -- первое чтение
(select ww from test_u(t.id,t.w+1)) -- изменение
, t.w -- второе чтение
from test t
дык вот второе чтение изменяемого поля не учитывает изменений внесенных
вызовом подзапроса.
От чего такое поведение - от порядка вызова подзапросов, от того, что сервер
умный, и одинаковые поля два раза с "диска" не читает, или...?
CREATE PROCEDURE TEST_U (
ID INTEGER,
W INTEGER)
returns (ww integer)
AS
BEGIN
UPDATE TEST
SET
W = :W
WHERE (ID = :ID);
select t.w from test t where t.id=:id into :ww;
suspend;
END
--
-=38 pанений ножом в области спины - какое жестокое самоубийство=-
With best regards, Nikolay Ponomarenko