powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как добавить к timestamp доли секунды
27 сообщений из 27, показаны все 2 страниц
Как добавить к timestamp доли секунды
    #39510040
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исходная задача такая:

В таблице есть поле ttt типа TIMESTAMP.
Время в поле ttt указано с точностью до секунды и некоторые записи повторяются.
Задача - сделать все значения ttt в таблице уникальными.
Для этого к каждой ttt собираюсь прибавить величину равную MOD (ROWNUM, 1000) в миллисекундах. Где ROWNUM - Текущий номер записи.

Вариант ttt = ttt + NUMTODSINTERVAL (nnn, 'SECOND') добавляет только секунды.
Вариант ttt = ttt + interval '0.01' работает только с литералами

А хочу что-то вроде:

UPDATE tab1 SET ttt = ttt + INTERVAL (MOD (rownum, 1000) / 1000);

У кого какие мысли?
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510045
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63Вариант ttt = ttt + NUMTODSINTERVAL (nnn, 'SECOND') добавляет только секунды.Т.е. ты действительно не знаешь сколько миллисекунд в секунде?sma63Вариант ttt = ttt + interval '0.01' работает только с литераламиRTFM Date Arithmetics: interval * number
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510046
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63У кого какие мысли?

Задача изначально бесперспективная. Не может время служить уникальным ключом. Даже если
события строго последовательны, рано или поздно два из них таки уложатся в одну миллисекунду.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510049
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63,

select cast( dt as timestamp(6) ) + numtodsinterval( rn*0.000001, 'second' ) from ( select rownum rn, sysdate dt from dual connect by rownum <= 10 );
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510053
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДаже если события строго последовательны, рано или поздно два из них таки уложатся в одну миллисекунду.С этим всё просто: не надо ставиться на винду, и тогда два последовательных вызова systimestamp дадут разное количество микро секунд.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510058
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicС этим всё просто: не надо ставиться на винду, и тогда два последовательных вызова
systimestamp дадут разное количество /микро/секунд.

Там всерьёз стоит задержка, не дающая этой функции вызываться чаще чем раз в микросекунду?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510062
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТам всерьёз стоит задержка, не дающая этой функции вызываться чаще чем раз в микросекунду?А с чего ты взял, что взятие времени бесплатно?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> exec dbms_output.put_line(systimestamp||chr(10)||systimestamp||chr(10)||systimestamp||chr(10)||systimestamp)
24-AUG-17 05.17.04.242165000 PM +03:00
24-AUG-17 05.17.04.242176000 PM +03:00
24-AUG-17 05.17.04.242179000 PM +03:00
24-AUG-17 05.17.04.242182000 PM +03:00

PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510070
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFF__|,

Сработало

UPDATE tab1 SET dt = dt + numtodsinterval (mod (rownum, 1000) * 0.001, 'SECOND');

Сеньки!
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510088
sma63СработалоС такими программистами войны не нужны. После внедрения их программ на опасном производстве, человечеству придется в сотый раз начинать с каменного века.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510091
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при желании можно и до пикосекунд расширить - на миллиард строк (почти) хватит:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with time_ as
 (select sysdate as d
    from dual
  union all
  select sysdate + 1 / 24
    from dual
  union all
  select sysdate - 1 / 5
    from dual),
str as
 (select to_char(d, 'dd.mm.yyyy hh24:mi:ss') || '.' ||
         to_char(lpad(rownum, 9, 0)) as q
    from time_)
select to_timestamp(q, 'dd.mm.yyyy hh24:mi:ss.FF9') from str
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510095
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63,

Ну хорошо, обновишь ты сейчас разово и сделаешь поле уникальным. И твой Unique/PK constraint не ругнется. А как быть при последующих вставках в таблицу? Если этот таймстамп будет проставляться ораклом (про это мы ничего не знаем) - то, похоже это то о чем дискутируют Elic и Dmitry Sibiryakov. А если будет заполняться клиентом - то тут тебе уникальность точно не гарантируется, на какой платформе бы ты оракл не разворачивал.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510097
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наносекунд (пико -12)
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510100
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadИ твой Unique/PK constraintА я вот в вопросе ни ограничения, ни индекса не увидел.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510102
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Ну я трактовал так нижеприведенное требование автора
sma63Задача - сделать все значения ttt в таблице уникальными.Но даже если декларативного ограничения нет, вопрос про вставку данных остается.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510139
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, ваши опасения на счет Unique/PK constraint для времени я разделяю. У меня процесс записи в базу инициируют 2..10 независимых процесса (некое оборудование производит измерение физических величин) раз в 5-8 секунд (каждый). Раньше у меня время фиксировалось с точностью до секунд. При этом время от времени неизбежно возникали ситуации когда нарушалась уникальность меток времени. При модернизации системы, я решил перейти на TIMESTAMP с точностью до миллисекунд. А ситуации нарушения уникальности собираюсь обрабатывать в аварийном исключении по этому поводу. Там предполагаю просто прибавлять к метке времени некую случайную величину и делать повторную попытку записи.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510142
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63ваши опасенияа зачем время должно быть уникально?
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510155
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-sma63ваши опасенияа зачем время должно быть уникально?
Время используется как естественный идентификатор события.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510157
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно было бы завести для этого кой-нибудь счетчик, но решение использовать метку времени показалось мне более изящным.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510171
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"This is the road... to Hell." (c)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510179
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понимаю, на использование времени в качестве индекса есть некое табу. Но моя база предполагает, в основном, выборки по времени. Поэтому городить огород с чем-нибудь другим показалось не совсем разумным.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510207
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63TIMESTAMP с точностью до миллисекунд.Таки винда?
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510208
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63Можно было бы завести для этого кой-нибудь счетчик, но решение использовать метку времени показалось мне более изящным.Ага. Нетленка всех времён и народов.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510431
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вопчем, такая обработка добавления новой записи:
create or replace procedure proc1 (p0 number, p1 number, p2 number, p3 number) is
t1 timestamp := systimestamp;
begin
insert into measure (dt, ant, r0, r1, r2) values (t1, p0, p1, p2, p3);
exception
when DUP_VAL_ON_INDEX then
while t1 = systimestamp loop
null;
end loop;
insert into measure (dt, ant, r0, r1, r2) values (systimestamp, p0, p1, p2, p3);
commit;
end;
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510435
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. если при добавлении новой записи возбуждается исключение по дублированию ключа - ждем пока изменятся показания часов и делаем вторую попытку.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510438
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sma63Т.е. если при добавлении новой записи возбуждается исключение по дублированию ключа - ждем пока изменятся показания часов и делаем вторую попытку.Прикрутил бы в качестве суррогатного PK sequence и не занимался бы мастурбацией.
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510557
sma63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так пропадет вся красота.)))
...
Рейтинг: 0 / 0
Как добавить к timestamp доли секунды
    #39510585
Озо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sma63,

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


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