|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
т.е. мне нужно как в SQL Server Код: plsql 1. 2. 3.
сейчас объявляю переменную Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
но наверняка можно как-то проще или короче. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 16:07 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
Albatrossнаверняка можно как-то проще или короче. Можно: поставь свой exists в условие запроса, который ты зацензурил точками. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 16:09 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
Albatross, Дело вкуса: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 16:24 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
Albatrossт.е. мне нужно как в SQL Server Код: plsql 1. 2. 3.
Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 16:24 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
Albatross Код: plsql 1. 2. 3.
В read commited это провокация. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 06:53 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
-2-Albatross Код: plsql 1. 2. 3.
В read commited это провокация.это фигня по сравнению с тем, что в МССКЛ с настройками по умолчанию незакомиченный инсерт блокирует любой селект из таблицы и коммит может не коммитить ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 10:55 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
Albatrossт.е. мне нужно как в SQL Server Код: plsql 1. 2. 3.
Зря пытаетесь свои знания по MS SQL Server на Oracle переносить. Тут вам не там. Вы же по велосипедной привычке крутить педали на мотоцикле не станете?! Что по сути сделать нужно напишите. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 12:13 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
-2-В read commited это провокация. Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 13:44 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDev-2-В read commited это провокация.Почему?Такая проверка имеет смысл, когда с данными заведомо работает только текущая транзакция. Либо при авось-программировании, когда вероятность проявления ошибки, помноженная на убытки, меньше, чем стоимость написания корректного кода за вычетом некорректного. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 13:53 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
-2-Такая проверка имеет смысл, когда с данными заведомо работает только текущая транзакция. Либо при авось-программировании, когда вероятность проявления ошибки, помноженная на убытки, меньше, чем стоимость написания корректного кода за вычетом некорректного. У вас все запросы с for update (от инсертов не спасет) или сразу блокируете все таблицы из которых будете читать данные или таки пользуетесь авось-программированием?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 14:48 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDevУ вас все запросы с for update (от инсертов не спасет)Согласен. Чтобы спастить от инсертов, надо юзать select ... for insert. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 15:20 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDevУ вас все запросы с for update Не следует путать теплое с мягким ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 15:24 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDevУ вас все запросы с for update (от инсертов не спасет) или сразу блокируете все таблицы Read commited это минное поле безотносительно if exists. Для его прохождения не обязательно блокировать всё и вся - целостность обеспечивают констрейнты. Без внятного обоснования, if exists просто мусор в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 15:25 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
-2-, а более другой isolation-level? (чисто теоретический вопрос) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 18:30 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
--Eugene--а более другой isolation-level? (чисто теоретический вопрос) ORA-08177 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 18:39 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
andrey_anonymousORA-08177какое-то разочарование ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2019, 00:01 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
AmKadСогласен. Чтобы спастить от инсертов, надо юзать select ... for insert. Не спасет. Если с повторяющимися чтениями можно выкрутиться блокировкой выборок, то с фантомными чтениями только блокировкой всего ресурса к которому идет совместный доступ, чтобы нельзя было параллельно вставлять записи для ресурса (в примере ниже ресурс - переговорная комната). -2-Read commited это минное поле безотносительно if exists. Для его прохождения не обязательно блокировать всё и вся - целостность обеспечивают констрейнты. Без внятного обоснования, if exists просто мусор в коде. Это не минное поле, это механизм совместной работы с данными, который нужно понимать. if exists всего лишь частный случай проверки, возвращает ли запрос хотя бы одну запись, ничего кошмарного в нем нет и мусора в коде такая конструкция не добавляет и им не является. Констрейнты обеспечивают лишь самые простые ограничения целостности, бизнес логика гораздо сложнее чем возможности констрейнтов, возьмем самый простой пример у Кайта, есть переговорные комнаты, есть бронирование времени в них (вставка строк с интервалом с .. по), как простыми ограничениями целостности добиться чтобы интервалы не пересекались? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2019, 20:54 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDevкак простыми ограничениями целостности добиться чтобы интервалы не пересекались?Через FK начало=конец. А как через if exists? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2019, 21:50 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
-2-Через FK начало=конец. Есть переговорка1, один сотрудник забронировал ее с 13 до 14 а другой с 16 до 18, третий с 15 до 17, к чему прикладывать FK? -2-А как через if exists? Никак, это конструкция языка не реализованная в Oracle, делает код проще и читабельнее в тех случаях когда она требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2019, 22:17 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDevвозьмем самый простой пример у Кайта, есть переговорные комнаты, есть бронирование времени в них (вставка строк с интервалом с .. по), как простыми ограничениями целостности добиться чтобы интервалы не пересекались? определиться с минимальным интервалом бронирования. час, полчаса, минута... не важно. факт бронирования хранить как идентификатор комнаты + дата бронирования + интервал бронирования + доп. инфа (кто забронировал и т.п.) на первые три поля наложить ограничение уникальности. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 00:11 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDevк чему прикладывать FK?крайне просто же: room id начало конец id сотрудника(NULL - свободно)1nullnullnull(свободно)2null2019-01-01 08:30:00null(свободно)22019-01-01 08:30:002019-01-01 09:30:001 (занято)22019-01-01 09:30:002019-01-01 11:00:00null (свободно)22019-01-01 11:00:002019-01-01 11:30:002 (занято)22019-01-01 11:30:00nullnull (свободно) fk конец->начало unique: room id, начало ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 00:19 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
кит северных морейопределиться с минимальным интервалом бронирования. час, полчаса, минута... не важно. Очень плохое решение. xtender, Месье знает толк в извращениях)), итого имеем две фиктивные строки на каждую комнату всегда и некоторое количество дополнительно, для второй комнаты на 2 реальных строки несущих информацию, три фиктивных, вместо двух простых вставок сплитование. И все равно это не поможет, старт параллельной ветки никак не запрещен room idначалоконецid сотрудника(NULL - свободно)2null2019-01-01 08:31:00null(свободно) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 01:27 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
iOracleDevОчень плохое решениечем же? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 01:31 |
|
как проще всего в Оракле писать if exists()
|
|||
---|---|---|---|
#18+
кит северных морей, Бронь с 9 до 18 тремя блоками, берем интервал минуту и получаем вместо трех записей 540, для переговорной комнаты и интервала 10 или 15 минут такое решение еще можно как то пропихнуть, в общем случае оно не пригодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 01:44 |
|
|
start [/forum/topic.php?fid=52&msg=39868827&tid=1882026]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 407ms |
0 / 0 |