169 похожих чатов

Есть код, который должен поменять строку по уникальному ключу, если

она есть, либо вставить новую с какими-то значениями по умолчанию, если ее еще нет. удалений нет и не будет, конкуренция - теоретически возможно.

какие там последние достижения разработческой мысли на этот счет? merge всё так же не атомарен? писать по старинке insert/except dup_val_on_index/update? заранее наполнять таблицу пакетно, чтобы потом работал только update?

18 ответов

32 просмотра

Частота операций какая и объемы данных? Это к тому надо ли заполнять все заранее

Kirill-Leontev Автор вопроса
キリル kirigami
Частота операций какая и объемы данных? Это к тому...

пока всё смешное. со временем вырастет в несколько раз, но всё еще будет смешное. в принципе, insert/dup_val_on_index/update логически полностью устраивает, просто думаю, придумали ли что лучше.

В смысле не атомарен? У него, конечно, есть некоторые проблемы, например, с триггерами, но он всегда был атомарен.

xtender
В смысле не атомарен? У него, конечно, есть некото...

А расскажите какие там с триггерами проблемы

キリル kirigami
А расскажите какие там с триггерами проблемы

Двойной вызов строчных на insert/update/delete

Kirill-Leontev Автор вопроса
xtender
В смысле не атомарен? У него, конечно, есть некото...

ок. неверно выразился. в том смысле, что либо выполняется целиком, либо не выполняется целиком - конечно он атомарен.

Kirill Leontev
ок. неверно выразился. в том смысле, что либо выпо...

В чем именно претензия к мерджу? Разве, не любой DML так себя ведёт - выполняется только целиком?

Kirill-Leontev Автор вопроса
Alexei Onin
В чем именно претензия к мерджу? Разве, не любой D...

любой. про атомарность, повторюсь, я сказал глупость. вероятно в том что он не увидит вставки из конкурентной сессии и отвалится с ora-1. дома напишу тест, проверю.

Спасибо! Будет интересно

Kirill-Leontev Автор вопроса
Alexei Onin
Спасибо! Будет интересно

да ничего там интересного скорее всего не будет. два одинаковых merge в разных сессиях в пустую таблицу. первый вставит, второй повиснет на блокировке. если первый зафиксирует, то второй отвалится с ора-1. наверное.

ZhekaPPP
не, ORA-1 выходит

insert ведёт себя точно также. Я так и не понял в чём была претензия к merge и почему вместо него надо писать insert/update

Alexei Onin
insert ведёт себя точно также. Я так и не понял в ...

претензия, видимо, в том, что это не очевидно, что merge может выдать такую ошибку :)

Alexei Onin
insert ведёт себя точно также. Я так и не понял в ...

insert /*+ ignore_row_on_dupkey_index()*/ into вставит недублирующие записи merge упадёт если есть хотя бы один дубль

Anton
insert /*+ ignore_row_on_dupkey_index()*/ into вст...

а с таким хитрым хинтом ошибок не будет и оно просто их проигнорит?

ZhekaPPP
не, ORA-1 выходит

А, да, туплю - логично же с точки зрения acid так и должно быть: на момент старта стейтмента строки не существует, поэтому идёт вставка, а не апдейт

Kirill-Leontev Автор вопроса
Alexei Onin
insert ведёт себя точно также. Я так и не понял в ...

в том что merge в описанном примере выбрасывает ора-1, а не выполняет апдейт. что, если задуматься о том, как работать мердж, логично и ожидаемо, но мне от этого не легче 🤣 ну и вообще он, вероятно, не был предназначен для построчных апсертов

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта