powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница в двух записях?
19 сообщений из 19, страница 1 из 1
Разница в двух записях?
    #39622159
Vadimkaaaaaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Помогите с вопросом.
Суть:
Есть таблица, и ее копия за вчерашний день.
С помощью команды MINUS нахожу разницу между ними (добавленные, удаленные и обновленные) записи.
вопрос как найти поля в которых произошло обновление?
...
Рейтинг: 0 / 0
Разница в двух записях?
    #39622164
-gt-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadimkaaaaaa , full join + сравнение соответствующих полей
...
Рейтинг: 0 / 0
Разница в двух записях?
    #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
Разница в двух записях?
    #39622176
efendi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadimkaaaaaa,

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

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

....
stax

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

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

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

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

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

решение в оракле необходимо, в екселе для наглядности только набросал
...
Рейтинг: 0 / 0
Разница в двух записях?
    #39622432
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxчто хотите получить на выходе
насколько регулярна работа
сколько таблиц
меняется ли структура
...
Рейтинг: 0 / 0
Разница в двух записях?
    #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
Разница в двух записях?
    #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
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разница в двух записях?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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