powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как прохэшировать значение по всем полям
14 сообщений из 14, страница 1 из 1
Как прохэшировать значение по всем полям
    #35557895
Всем привет.
Возникла такая мини проблемка, нужно получить хэш-значение по всем полям для каждой строки в селекте. Делалось для того, чтобы узнать, изменилось что-либо в этих значениях или нет.
Самое легкое что нашел, это прохэшировать все значения (по одному) и сложить в сумму. Делалось примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select cp.*, DBMS_UTILITY.get_hash_value (ccp.phonetype,
                                                              9393 ,
                                                              999999 
                                                            )
                              + DBMS_UTILITY.get_hash_value (ccp.clientid,
                                                              9393 ,
                                                              999999 
                                                            )
                              + DBMS_UTILITY.get_hash_value (ccp.countrycode,
                                                              9393 ,
                                                              999999 
                                                            )
                              + DBMS_UTILITY.get_hash_value (ccp.phone,
                                                              9393 ,
                                                              999999 
                                                            ) as hash_value from clientphones cp
Хотелось бы найти способ побыстрее найти отличия того, что изменилось с момента вчерашнего обновления. То есть, есть ли функция, которая сразу вычисляет хэш всей строки, либо что-то, что позволяет узнать, когда данная строчка была обновлена.
Сорри, если не так объяснил
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35557908
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Улитинлибо что-то, что позволяет узнать, когда данная строчка была обновлена.Можно, например, записывать дату обновления сроки в триггере в отдельное поле и сравнивать с предыдущей.
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35557923
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите на OWA_OPT_LOCK.CHECKSUM - может подойдёт.
Код: plaintext
1.
--
Per rectum ad astrum
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35557929
Схема чужая и прав на нее хватает только на селект.

Сейчас стало быть работает так (ногами пинать не очень сильно):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select phoneid, 
DBMS_UTILITY.get_hash_value (ccp.phonetype,
                                                              9393 ,
                                                              999999 
                                                            )
                              + DBMS_UTILITY.get_hash_value (ccp.clientid,
                                                              9393 ,
                                                              999999 
                                                            )
                              + DBMS_UTILITY.get_hash_value (ccp.countrycode,
                                                              9393 ,
                                                              999999 
                                                            )
                              + DBMS_UTILITY.get_hash_value (ccp.phone,
                                                              9393 ,
                                                              999999 
                                                            ) as hash_value from schema1.clientphones
minus
select phoneid, hash_value from schema2.clientphones
А потом стало быть проводяться все действия по обновлению данных в schema2
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35557935
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В добавление - можно смотреть на SCN
читать здесь
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35557936
Anton DemidovПосмотрите на OWA_OPT_LOCK.CHECKSUM - может подойдёт.
Код: plaintext
1.
--
Per rectum ad astrum

НУ если судить по описанию, то как раз то, что нужно
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35557940
BelyВ добавление - можно смотреть на SCN
читать здесь
Насколько я помню, что SCN_TO_TIMESTAMP работает только на 10, а у меня 9.2.0.5
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35557960
Anton DemidovПосмотрите на OWA_OPT_LOCK.CHECKSUM - может подойдёт.
Код: plaintext
1.
--
Per rectum ad astrum

Все таки не подошло,
Код: plaintext
ORA-14551 cannot perform a DML operation inside a query 
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35558202
Фотография Anton Demidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Улитин Anton DemidovПосмотрите на OWA_OPT_LOCK.CHECKSUM - может подойдёт.
Код: plaintext
1.
--
Per rectum ad astrum

Все таки не подошло,
Код: plaintext
ORA-14551 cannot perform a DML operation inside a query 


Извини, пропустил Максим Улитинхэш-значение по всем полям для каждой строки в селекте
Вам бы ORA_HASH использовать, но он в 9.2 отсутсвует. Так что конкатенируйте строки и получайте их хеш по-старому
Код: plaintext
1.
2.
3.
select cp.*, DBMS_UTILITY.get_hash_value (ccp.phonetype||ccp.clientid||ccp.countrycode||ccp.phone,
                                           9393 ,
                                           999999 
                                         ) as hash_value from clientphones cp
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35558362
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
tst> select owa_opt_lock.checksum('SYS', 'DUAL', rowid) from dual;
select owa_opt_lock.checksum('SYS', 'DUAL', rowid) from dual
       *
ERROR at line  1 :
ORA- 14551 : cannot perform a DML operation inside a query
ORA- 06512 : at "SYS.DBMS_SYS_SQL", line  1120 
ORA- 06512 : at "SYS.DBMS_SQL", line  323 
ORA- 06512 : at "SYS.OWA_OPT_LOCK", line  116 


tst> create function my_owa_opt_lock_checksum(owner varchar2, name varchar2, r rowid)
   2   return number as
   3   pragma autonomous_transaction;
   4   n number;
   5   begin n := owa_opt_lock.checksum(owner, name, r);
   6         rollback;
   7         return n;
   8   end;
   9   /

Function created.

tst> select my_owa_opt_lock_checksum('SYS', 'DUAL', rowid) from dual;

MY_OWA_OPT_LOCK_CHECKSUM('SYS','DUAL',ROWID)
--------------------------------------------
                                        22648 
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #35559815
НУ по поводу автономной транзакции я еще вчера по попробовал написать, но к сожалению такой вариант хоть и рабочий, но не подходит. Так как все тормозит безбожно, 10К записей за 15 секунд - это ужас какой.
Код: plaintext
SELECT get_checksum('debt', 'clientphones', rowid) AS checksum, cp.* FROM clientphones cp
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как прохэшировать значение по всем полям
    #39347392
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача такая же.
Случаем ничего новее, шустрее чем DBMS_UTILITY.get_hash_value не появилось в PL/SQL (ORA_HASH только для SQL как понял).
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #39347546
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AvotgeСлучаем ничего новееdbms_obfuscation_toolkit.md5, DBMS_CRYPTO.Hash
AvotgeшустрееМеряй.
...
Рейтинг: 0 / 0
Как прохэшировать значение по всем полям
    #39347703
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AvotgeЗадача такая же.
Случаем ничего новее, шустрее чем DBMS_UTILITY.get_hash_value не появилось в PL/SQL (ORA_HASH только для SQL как понял).

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


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