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

Ответить