|
|
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Исходная задача такая: В таблице есть поле 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); У кого какие мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:46 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63Вариант ttt = ttt + NUMTODSINTERVAL (nnn, 'SECOND') добавляет только секунды.Т.е. ты действительно не знаешь сколько миллисекунд в секунде?sma63Вариант ttt = ttt + interval '0.01' работает только с литераламиRTFM Date Arithmetics: interval * number ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:51 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63У кого какие мысли? Задача изначально бесперспективная. Не может время служить уникальным ключом. Даже если события строго последовательны, рано или поздно два из них таки уложатся в одну миллисекунду. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:55 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63, select cast( dt as timestamp(6) ) + numtodsinterval( rn*0.000001, 'second' ) from ( select rownum rn, sysdate dt from dual connect by rownum <= 10 ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:57 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДаже если события строго последовательны, рано или поздно два из них таки уложатся в одну миллисекунду.С этим всё просто: не надо ставиться на винду, и тогда два последовательных вызова systimestamp дадут разное количество микро секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 16:59 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
ElicС этим всё просто: не надо ставиться на винду, и тогда два последовательных вызова systimestamp дадут разное количество /микро/секунд. Там всерьёз стоит задержка, не дающая этой функции вызываться чаще чем раз в микросекунду? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 17:08 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТам всерьёз стоит задержка, не дающая этой функции вызываться чаще чем раз в микросекунду?А с чего ты взял, что взятие времени бесплатно? Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 17:21 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
AlexFF__|, Сработало UPDATE tab1 SET dt = dt + numtodsinterval (mod (rownum, 1000) * 0.001, 'SECOND'); Сеньки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 17:31 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63СработалоС такими программистами войны не нужны. После внедрения их программ на опасном производстве, человечеству придется в сотый раз начинать с каменного века. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 18:03 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
при желании можно и до пикосекунд расширить - на миллиард строк (почти) хватит: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 18:15 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63, Ну хорошо, обновишь ты сейчас разово и сделаешь поле уникальным. И твой Unique/PK constraint не ругнется. А как быть при последующих вставках в таблицу? Если этот таймстамп будет проставляться ораклом (про это мы ничего не знаем) - то, похоже это то о чем дискутируют Elic и Dmitry Sibiryakov. А если будет заполняться клиентом - то тут тебе уникальность точно не гарантируется, на какой платформе бы ты оракл не разворачивал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 18:18 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
наносекунд (пико -12) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 18:23 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
AmKadИ твой Unique/PK constraintА я вот в вопросе ни ограничения, ни индекса не увидел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 18:30 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Elic, Ну я трактовал так нижеприведенное требование автора sma63Задача - сделать все значения ttt в таблице уникальными.Но даже если декларативного ограничения нет, вопрос про вставку данных остается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 18:35 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Народ, ваши опасения на счет Unique/PK constraint для времени я разделяю. У меня процесс записи в базу инициируют 2..10 независимых процесса (некое оборудование производит измерение физических величин) раз в 5-8 секунд (каждый). Раньше у меня время фиксировалось с точностью до секунд. При этом время от времени неизбежно возникали ситуации когда нарушалась уникальность меток времени. При модернизации системы, я решил перейти на TIMESTAMP с точностью до миллисекунд. А ситуации нарушения уникальности собираюсь обрабатывать в аварийном исключении по этому поводу. Там предполагаю просто прибавлять к метке времени некую случайную величину и делать повторную попытку записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 20:29 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63ваши опасенияа зачем время должно быть уникально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 20:37 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
-2-sma63ваши опасенияа зачем время должно быть уникально? Время используется как естественный идентификатор события. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 21:22 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Можно было бы завести для этого кой-нибудь счетчик, но решение использовать метку времени показалось мне более изящным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 21:30 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
"This is the road... to Hell." (c) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 22:09 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Понимаю, на использование времени в качестве индекса есть некое табу. Но моя база предполагает, в основном, выборки по времени. Поэтому городить огород с чем-нибудь другим показалось не совсем разумным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2017, 22:59 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63TIMESTAMP с точностью до миллисекунд.Таки винда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2017, 07:30 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63Можно было бы завести для этого кой-нибудь счетчик, но решение использовать метку времени показалось мне более изящным.Ага. Нетленка всех времён и народов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2017, 07:33 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Ну вопчем, такая обработка добавления новой записи: 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2017, 12:57 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
Т.е. если при добавлении новой записи возбуждается исключение по дублированию ключа - ждем пока изменятся показания часов и делаем вторую попытку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2017, 13:00 |
|
||
|
Как добавить к timestamp доли секунды
|
|||
|---|---|---|---|
|
#18+
sma63Т.е. если при добавлении новой записи возбуждается исключение по дублированию ключа - ждем пока изменятся показания часов и делаем вторую попытку.Прикрутил бы в качестве суррогатного PK sequence и не занимался бы мастурбацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2017, 13:04 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39510157&tid=1885358]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 483ms |

| 0 / 0 |
