powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / История изменения столбцов в виде <старое значение - новое значение - дата>
3 сообщений из 3, страница 1 из 1
История изменения столбцов в виде <старое значение - новое значение - дата>
    #39660979
arCHi_1887
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица вида (столбцов параметров не 4, а, допустим, 10):
primary_keylogical_keychange_timeparam1param2param3param41114.06.2018 22:00:00x1f32114.06.2018 22:00:01y4e323114.06.2018 22:00:02t12r324114.06.2018 22:00:02t45d40

В ней хранится полная история изменений.
То есть когда идет логический update одной ячейки - в таблицу вставляется строка, дублирующая все значения из предыдущей строки
по этому logical_key, и в этой новой строке только значение обновляемой ячейки будет новым.

Нужно вывести историю изменения параметров в таком виде:
param_nameold_valuenew_valuechange_timeparam1nullx14.06.2018 22:00:00param2null114.06.2018 22:00:00param3nullf14.06.2018 22:00:00param4null314.06.2018 22:00:00param1xy14.06.2018 22:00:01param21414.06.2018 22:00:01param3fe14.06.2018 22:00:01param433214.06.2018 22:00:01param1yt14.06.2018 22:00:02param241214.06.2018 22:00:02param3er14.06.2018 22:00:02param2124514.06.2018 22:00:02param3rd14.06.2018 22:00:02param4324014.06.2018 22:00:02

Сделал вот так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select * from
  (select 
     'param1' as param_name,
     nvl(to_char(lag(t.param1) over (order by t.primary_key)), 'null') as old_value,
     nvl(to_char(t.param1), 'null') as new_value,
     t.change_time
  from my_table t
  where t.logical_key = :pLogical_key) tt
where tt.old_value <> tt.new_value
union all
select * from
  (select 
     'param2' as param_name,
     nvl(to_char(lag(t.param2) over (order by t.primary_key)), 'null') as old_value,
     nvl(to_char(t.param2), 'null') as new_value,
     t.change_time
  from my_table t
  where t.logical_key = :pLogical_key) tt
where tt.old_value <> tt.new_value
/* union all etc. */
order by 4, 1



Но это очевидно не то, что можно использовать.

Как сделать по нормальному?
...
Рейтинг: 0 / 0
История изменения столбцов в виде <старое значение - новое значение - дата>
    #39661068
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arCHi_1887,

unpivot + lag

ps
лень с утра набивать тестовые

.....
stax
...
Рейтинг: 0 / 0
История изменения столбцов в виде <старое значение - новое значение - дата>
    #39661123
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или pipelined функцию и select уже из неё.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / История изменения столбцов в виде <старое значение - новое значение - дата>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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