Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница в двух записях? / 19 сообщений из 19, страница 1 из 1
28.03.2018, 16:18
    #39622159
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Добрый день! Помогите с вопросом.
Суть:
Есть таблица, и ее копия за вчерашний день.
С помощью команды MINUS нахожу разницу между ними (добавленные, удаленные и обновленные) записи.
вопрос как найти поля в которых произошло обновление?
...
Рейтинг: 0 / 0
28.03.2018, 16:26
    #39622164
-gt-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Vadimkaaaaaa , full join + сравнение соответствующих полей
...
Рейтинг: 0 / 0
28.03.2018, 16:27
    #39622166
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Код: plsql
1.
2.
  JOIN on t.key = t_backup.key
where t.value != t_backup.value



и прочие вариации под ваши нужды

Код: plsql
1.
2.
FULL JOIN on t.key = t_backup.key
where nvl(t.value, '...') != nvl(t_backup.value, '...')
...
Рейтинг: 0 / 0
28.03.2018, 16:34
    #39622176
efendi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Vadimkaaaaaa,

PIVOT
...
Рейтинг: 0 / 0
28.03.2018, 16:46
    #39622186
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
efendi,
скорее unpivot

....
stax
...
Рейтинг: 0 / 0
28.03.2018, 16:52
    #39622194
efendi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Staxefendi,
скорее unpivot

....
stax

Ага. Протупил
...
Рейтинг: 0 / 0
28.03.2018, 20:37
    #39622340
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Оракл 10g стоит
...
Рейтинг: 0 / 0
29.03.2018, 06:17
    #39622409
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
VadimkaaaaaaДобрый день! Помогите с вопросом.
Суть:
Есть таблица, и ее копия за вчерашний день.
С помощью команды MINUS нахожу разницу между ними (добавленные, удаленные и обновленные) записи.
вопрос как найти поля в которых произошло обновление?что хотите получить на выходе
насколько регулярна работа
сколько таблиц
меняется ли структура
...
Рейтинг: 0 / 0
29.03.2018, 06:43
    #39622411
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Послеследующий вопрос будет, в каком бите отличие.
...
Рейтинг: 0 / 0
29.03.2018, 06:43
    #39622412
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
скорее unpivot

unpivot сработает, если все поля одного типа, что есть не факт.
+ вряд ли дальнейшая обработка будет легче.
...
Рейтинг: 0 / 0
29.03.2018, 08:01
    #39622422
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
сравниваются всегда две таблицы, структура у них одинаковая, потому что одна таблица это копия другой но за предыдущий день. на выходе нужно получить массив с отличающимися полями(столбцами).
...
Рейтинг: 0 / 0
29.03.2018, 08:07
    #39622425
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Схематично в экселе нарисовал, на выходе должен получить а3
...
Рейтинг: 0 / 0
29.03.2018, 08:12
    #39622427
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Ну так заведи третью строчку с булевой переменной.
И фильтруй по ней.
Если в Exel решил сделать.
...
Рейтинг: 0 / 0
29.03.2018, 08:13
    #39622428
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Vadimkaaaaaa,

А1-А6 одного типа?
...
Рейтинг: 0 / 0
29.03.2018, 08:25
    #39622429
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
982183Vadimkaaaaaa,

А1-А6 одного типа?
Нет, разного!

Для чего это нужно:
К примеру, если изменилиь а1 и а5 информируем одних лиц, если а2 и а3 других!
и полей в строке 250 шт, поэтому каждое поле на различие проверять нет резона
...
Рейтинг: 0 / 0
29.03.2018, 08:26
    #39622430
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
982183Ну так заведи третью строчку с булевой переменной.
И фильтруй по ней.
Если в Exel решил сделать.

решение в оракле необходимо, в екселе для наглядности только набросал
...
Рейтинг: 0 / 0
29.03.2018, 08:44
    #39622432
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
andreymxчто хотите получить на выходе
насколько регулярна работа
сколько таблиц
меняется ли структура
...
Рейтинг: 0 / 0
29.03.2018, 08:55
    #39622437
efendi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
Vadimkaaaaaa982183Ну так заведи третью строчку с булевой переменной.
И фильтруй по ней.
Если в Exel решил сделать.

решение в оракле необходимо, в екселе для наглядности только набросал

Нарыл в своих архивах. Надеюсь спасет отца русской демократии...

Код: 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.
declare
  procedure CompareRows(Select1 varchar2, Select2 varchar2)
  is
    c1 int;
    c2 int;
    n int;
    fValue1 varchar2(32000);
    fValue2 varchar2(32000);
    fColCnt1 int;
    fColCnt2 int;
    fCols1 dbms_sql.desc_tab;
    fCols2 dbms_sql.desc_tab;
  begin
    c1 := dbms_sql.open_cursor;
    c2 := dbms_sql.open_cursor;
    dbms_sql.parse(c1, Select1, dbms_sql.native);
    dbms_sql.parse(c2, Select2, dbms_sql.native);
    dbms_sql.describe_columns(c1, fColCnt1, fCols1);
    dbms_sql.describe_columns(c2, fColCnt2, fCols2);
    for i in 1..fColCnt1 loop
      dbms_sql.define_column(c1, i, fValue1, 32000);
      dbms_sql.define_column(c2, i, fValue2, 32000);
    end loop;
    n := dbms_sql.execute_and_fetch(c1, exact=>true);
    n := dbms_sql.execute_and_fetch(c2, exact=>true);
    for i in 1..fColCnt2 loop
      dbms_sql.column_value(c1, i, fValue1);
      dbms_sql.column_value(c2, i, fValue2);
      if not (fValue1 = fValue2 or fValue1 is null and fValue2 is null) then
        dbms_output.put_line('"' || fCols1(i).col_name || '": '||fValue1||' <> '||fValue2);
      end if;
    end loop;
    dbms_sql.close_cursor(c1);
    dbms_sql.close_cursor(c2);
  end;
begin
  CompareRows('select * from all_objects where object_name=''STANDARD'' and object_type=''PACKAGE''',
              'select * from all_objects where object_name=''STANDARD'' and object_type=''PACKAGE BODY''');
end ;
/

"OBJECT_ID": 648 <> 649
"OBJECT_TYPE": PACKAGE <> PACKAGE BODY
"CREATED": 05.07.04 14:21:38 <> 05.07.04 14:21:44
"LAST_DDL_TIME": 13.12.04 10:56:48 <> 05.07.04 14:21:44
"TIMESTAMP": 2001-11-19:00:00:00 <> 2004-07-05:14:21:44
...
Рейтинг: 0 / 0
29.03.2018, 15:31
    #39622719
Vadimkaaaaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разница в двух записях?
efendiVadimkaaaaaaпропущено...


решение в оракле необходимо, в екселе для наглядности только набросал

Нарыл в своих архивах. Надеюсь спасет отца русской демократии...

Код: 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.
declare
  procedure CompareRows(Select1 varchar2, Select2 varchar2)
  is
    c1 int;
    c2 int;
    n int;
    fValue1 varchar2(32000);
    fValue2 varchar2(32000);
    fColCnt1 int;
    fColCnt2 int;
    fCols1 dbms_sql.desc_tab;
    fCols2 dbms_sql.desc_tab;
  begin
    c1 := dbms_sql.open_cursor;
    c2 := dbms_sql.open_cursor;
    dbms_sql.parse(c1, Select1, dbms_sql.native);
    dbms_sql.parse(c2, Select2, dbms_sql.native);
    dbms_sql.describe_columns(c1, fColCnt1, fCols1);
    dbms_sql.describe_columns(c2, fColCnt2, fCols2);
    for i in 1..fColCnt1 loop
      dbms_sql.define_column(c1, i, fValue1, 32000);
      dbms_sql.define_column(c2, i, fValue2, 32000);
    end loop;
    n := dbms_sql.execute_and_fetch(c1, exact=>true);
    n := dbms_sql.execute_and_fetch(c2, exact=>true);
    for i in 1..fColCnt2 loop
      dbms_sql.column_value(c1, i, fValue1);
      dbms_sql.column_value(c2, i, fValue2);
      if not (fValue1 = fValue2 or fValue1 is null and fValue2 is null) then
        dbms_output.put_line('"' || fCols1(i).col_name || '": '||fValue1||' <> '||fValue2);
      end if;
    end loop;
    dbms_sql.close_cursor(c1);
    dbms_sql.close_cursor(c2);
  end;
begin
  CompareRows('select * from all_objects where object_name=''STANDARD'' and object_type=''PACKAGE''',
              'select * from all_objects where object_name=''STANDARD'' and object_type=''PACKAGE BODY''');
end ;
/

"OBJECT_ID": 648 <> 649
"OBJECT_TYPE": PACKAGE <> PACKAGE BODY
"CREATED": 05.07.04 14:21:38 <> 05.07.04 14:21:44
"LAST_DDL_TIME": 13.12.04 10:56:48 <> 05.07.04 14:21:44
"TIMESTAMP": 2001-11-19:00:00:00 <> 2004-07-05:14:21:44


Спасибо, почти то что нужно!!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница в двух записях? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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