powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Значение поля до update
25 сообщений из 26, страница 1 из 2
Значение поля до update
    #39564464
gfhfyjz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Делаю update поля, перед commit хотелось бы вытянуть предыдущее значение, которое было изменено, но в select-е.

Есть вариант заполнять временную таблицу,перед update-ом. Но это pl sql, а нужно в select-е.

Суть в том что бы в промежуточном отчете сравнивать новое и старое значение(до update ), и после проверки юзер делает commit или rollback.

Заранее спасибо.
...
Рейтинг: 0 / 0
Значение поля до update
    #39564468
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzДелаю update поля...
а нужно в select-е...
Ты определился, где хочешь получить значения?
...
Рейтинг: 0 / 0
Значение поля до update
    #39564473
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjz
Есть вариант заполнять временную таблицу,перед update-ом. Но это pl sql, а нужно в select-е.



в триггере?

ps
сначала сравнить "залоченное", потом изменить

.....
stax
...
Рейтинг: 0 / 0
Значение поля до update
    #39564475
gfhfyjz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFF__|,
Да, в селекте.
Но есть вариант в pl sql перед update-ом заполнить временную таблицу.

т.е. Выполняется блок pl sql с update-ом, затем юзер открывает отчет в котором нужно отобразить предыдущее значение. и затем идет коммит или роллбэк.
...
Рейтинг: 0 / 0
Значение поля до update
    #39564479
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzAlexFF__|,
Да, в селекте.
Но есть вариант в pl sql перед update-ом заполнить временную таблицу.

т.е. Выполняется блок pl sql с update-ом, затем юзер открывает отчет в котором нужно отобразить предыдущее значение. и затем идет коммит или роллбэк.
select for update
сравнений значений в отчете
update+commit or rollback
...
Рейтинг: 0 / 0
Значение поля до update
    #39564481
gfhfyjz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Триггер не трогаю.
Выполняется обычный блок pl sql.

И если значение "залоченное", как мне достучаться до нового значения которое должно было проставиться update-ом. Мне нужно сравнить новое и старое значение.

например как в триггере
есть :new и :old, вот мне тоже самое но в select-е.

update dual set dummy = 'Y';
select :new.dummy,:old.dummy from dual
...
Рейтинг: 0 / 0
Значение поля до update
    #39564487
gfhfyjz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFF__|,

select for update вернет только старое значение, а нужно одновременно и новое и старое.
Приблизительно:
update dual set dummy = 'Y';
select :new.dummy,:old.dummy from dual
...
Рейтинг: 0 / 0
Значение поля до update
    #39564488
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzAlexFF__|,

select for update вернет только старое значение, а нужно одновременно и новое и старое.
Приблизительно:
update dual set dummy = 'Y';
select :new.dummy,:old.dummy from dual
У тебя нет новых значений? =)
Не нужно обновлять записи просто так.
Решил - тогда обновляй.
...
Рейтинг: 0 / 0
Значение поля до update
    #39564489
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzстарое значение(до update )
Код: plsql
1.
as of

Но скорее всего, ты выбрал неправильный путь.
...
Рейтинг: 0 / 0
Значение поля до update
    #39564492
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update dual set dummy = 'Y' returning :old.dummy
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Значение поля до update
    #39564496
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovupdate dual set dummy = 'Y' returning :old.dummy
А где это выполнять? В instead of триггере для вьюхи поверх dual-а?
...
Рейтинг: 0 / 0
Значение поля до update
    #39564499
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzзатем юзер открывает отчет в котором нужно отобразить предыдущее значение
commit не делай, оно само отобразится в другой сессии-то
...
Рейтинг: 0 / 0
Значение поля до update
    #39564502
gfhfyjz,

Издревле оптимисты действовали по сценарию:
Код: plsql
1.
2.
3.
select поле from таблица where ключ=кого;
...
update таблица set поле=new_значение where ключ=кого and поле=old_значение /*not null*/;


Более модный вариант, включить rowdependencies и пользовать ora_rowscn.

Для поизвращаться есть совсем альтернативно-одаренные способы.
...
Рейтинг: 0 / 0
Значение поля до update
    #39564514
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovupdate dual set dummy = 'Y' returning :old.dummy


SQL) /
SP2-0552: Bind variable "OLD" not declared.
SQL)

.....
stax
...
Рейтинг: 0 / 0
Значение поля до update
    #39564515
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzСуть в том что бы в промежуточном отчете сравнивать новое и старое значение(до update ), и после проверки юзер делает commit или rollback.
А зачем все делать в последний момент...
Нет возможности отобразить старые данные до нажатия на кнопку перед изменением?
...
Рейтинг: 0 / 0
Значение поля до update
    #39564528
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzStax,

Триггер не трогаю.
Выполняется обычный блок pl sql.

И если значение "залоченное", как мне достучаться до нового значения которое должно было проставиться update-ом. Мне нужно сравнить новое и старое значение.

например как в триггере
есть :new и :old, вот мне тоже самое но в select-е.

update dual set dummy = 'Y';
select :new.dummy,:old.dummy from dual

старое значения не в триггере не знаю как получить

если табличка Ваша, можно в таблице сохранять в доп. полях old_xxx (чуть подгрузит ну и фиг)
update t set old_xxx=xxx, xxx=new_v ....

если система не для полета на Марс с Восточного и допускает вольности
можно прикрутить "флашбек" или читать в автономке,
получим "примерно" старые значения, но оно Вам надо

мне кажется подход не православный
сначало надо
1) select for update (олд значения)
2) сравниваем с новыми (Вы ж их знаете)
3) если подходит update where ...+commit, не подходит коммит без update
4) rollback токо в случае сбоя


.....
stax
...
Рейтинг: 0 / 0
Значение поля до update
    #39564552
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table табля (ключ number, поле number);
insert into табля values (1, -1);
commit;
var пере number

update табля т0 set поле = trunc(dbms_random.value(10,20)) where ключ = 1 returning (select поле from табля т1 where т1.ключ = т0.ключ) into :пере;
select :пере, поле from табля;

     :ПЕРЕ       ПОЛЕ
---------- ----------
        -1         18

update табля т0 set поле = trunc(dbms_random.value(10,20)) where ключ = 1 returning (select поле from табля т1 where т1.ключ = т0.ключ) into :пере;
select :пере, поле from табля;

     :ПЕРЕ       ПОЛЕ
---------- ----------
        18         16

drop table табля purge;
...
Рейтинг: 0 / 0
Значение поля до update
    #39564567
gfhfyjz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все выполняется в одной сессии.
Контролировать перед изменение не получится, так настроена система.
returning не подходит, потому что используется в pl sql, а нужно в чистом sql, потому что отчет строится отдельно без использования pl sql


Staxмне кажется подход не православный
сначало надо
1) select for update (олд значения)
2) сравниваем с новыми (Вы ж их знаете)
3) если подходит update where ...+commit, не подходит коммит без update
4) rollback токо в случае сбоя


По второму пункту, новое значение знаю только когда будет update. в отчет не передается параметр нового значение.

По комментариям понимаю, что от варианта с временной таблицей не обойтись.

Всем спасибо;)
...
Рейтинг: 0 / 0
Значение поля до update
    #39564577
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzПо комментариям понимаю, что от варианта с временной таблицей не обойтись.Ни хера ты не понял.
...
Рейтинг: 0 / 0
Значение поля до update
    #39564595
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjz,

заполнение временной, всеравно на какой-то момент времени

тоесть время перед update известно, можно флашбек использовать

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
16:18:25 SQL> select * from t for update;

Z          D
---------- ----------
1          1000
2          2000
3          3000
4          4000
5          5000
6          6000
7          7000
8          8000
9          9000
10         10000
11         11000
12         12000
13         13000

13 rows selected.

16:18:47 SQL> update t set d=d+z;

13 rows updated.

16:19:01 SQL>
16:20:32 SQL> select
16:20:37   2   t1.z,t1.d,t2.z z_old,t2.d d_old
16:20:37   3  from t t1,t as of timestamp (sysdate - 1/24/60) t2
16:20:37   4  where t1.rowid=t2.rowid
16:20:37   5  /

Z          D          Z_OLD      D_OLD
---------- ---------- ---------- ----------
1          1001       1          1000
2          2002       2          2000
3          3003       3          3000
4          4004       4          4000
5          5005       5          5000
6          6006       6          6000
7          7007       7          7000
8          8008       8          8000
9          9009       9          9000
10         10010      10         10000
11         11011      11         11000
12         12012      12         12000
13         13013      13         13000

13 rows selected.

16:20:38 SQL>




.....
stax
...
Рейтинг: 0 / 0
Значение поля до update
    #39564643
gfhfyjz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicgfhfyjzПо комментариям понимаю, что от варианта с временной таблицей не обойтись.Ни хера ты не понял.

То что я не понял уже догадался, на Ваш коммент не обратил внимание. Раньше такой функционал не использовал, по этому не придал значению. Спасибо.



Stax, отдельное спасибо за подробное объяснение. То что доктор прописал!!!!!!
...
Рейтинг: 0 / 0
Значение поля до update
    #39564737
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjzТо что доктор прописал!!!!!!
Вряд ли доктор такое прописал бы...
Если уж идти на такие извраты - то хотя бы as of scn, полученный непосредственно перед update, а уж никак не as of timestamp.
...
Рейтинг: 0 / 0
Значение поля до update
    #39564739
andrey_anonymousВряд ли доктор такое прописал бы...Ничего, от побочных эффектов доктор пропишет эксклюзивную блокировку на таблицу и dbms_lock.sleep(3).
...
Рейтинг: 0 / 0
Значение поля до update
    #39564815
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousas of scn, полученный непосредственно перед update, а уж никак не as of timestamp.+
...
Рейтинг: 0 / 0
Значение поля до update
    #39564849
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfhfyjz,

А какую реальную задачу мусье решает столь извращёнными способами?
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Значение поля до update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]