|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Есть скрипт: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Таблица mytable на момент начала выполнения скрипта пустая, на ней висит триггер для генерации ПК. Больше ничего нет. Все вставляемые записи имеют уникальное значение ПК, т.е. апдейтов заведомо нет, только инсерты. При попытке выполнения этого скрипта первый блок выполняется без проблем, а вот выполнение второго приводит к ошибке: Код: plaintext 1. 2. 3.
При замене UPDATE OR INSERT на просто INSERT никаких проблем нет: скрипт выполняется без ошибок. Если сократить количество операторов в блоке до 50, например, - проблем тоже нет. Собственно, вопросов два: 1. Это нормально? 2. Если это нормально, то как определить, сколько операторов можно запихать в блок? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2015, 16:36 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
IBExpert, очень странно. Вообще при выполнении execute block в редакторе скриптов обычно переключают разделитель с помощью SET TERM. Количество контекстов с каждом следующем операторе EB должно сбрасываться ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2015, 16:40 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Симонов ДенисВообще при выполнении execute block в редакторе скриптов обычно переключают разделитель с помощью SET TERM. В эксперте это необязательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2015, 17:01 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
я не могу объяснить почему эта ошибка вылетает при обработке второго EB. Что насчёт UPDATE OR INSERT, то в этом случае каждый оператор отжирает как минимум 2 контекста, тогда как обычный INSERT один. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2015, 17:08 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
IBExpertПри попытке выполнения этого скрипта первый блок выполняется без проблем, а вот выполнение второго приводит к ошибке:Так чем блоки-то отличаются ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2015, 17:18 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
hvladIBExpertПри попытке выполнения этого скрипта первый блок выполняется без проблем, а вот выполнение второго приводит к ошибке:Так чем блоки-то отличаются ? Только данными самих записей, больше ничем. Если по 50 операторов в блок паковать, то все ОК: все 200 блоков (10000 записей) выполняются без проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2015, 17:25 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Кажется, я наврал вчера. Не выполняется уже первый блок, если количество операторов в нем больше 85. Получается, в блок можно упаковать не больше 85 UPDATE OR INSERT. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2015, 09:46 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
IBExpertКажется, я наврал вчера. Не выполняется уже первый блок, если количество операторов в нем больше 85. Получается, в блок можно упаковать не больше 85 UPDATE OR INSERT. все ждали, когда же ты признаешься :-) 256/3 = 85, однако. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2015, 09:51 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
dimitrвсе ждали, когда же ты признаешься :-) 256/3 = 85, однако. И что это значит? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2015, 07:24 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Exteris, что есть лимит в 256 контекстов на запрос и что UPDATE OR INSERT использует три контекста ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2015, 08:45 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Подниму тему... Опять возникли вопросы с too many contexts. При некоторых условиях (у меня не воспроизводится, жалуются пользователи) казалось бы корректные блоки вызывают упомянутую ошибку. Юзер прислал тексты двух блоков. В одном 227 апдейтов + 2 инсерта. В другом 168 апдейтов. Апдейты обыкновенные, без OR INSERT и селектов в них. Firebird 2.5, точную версию могу уточнить. Собственно, вопрос: для подобных блоков (последовательность INSERT/UPDATE) можно ли заранее закладываться на то, что на каждый запрос потребуется ровно один контекст, или же при каких-то условиях контекстов может понадобиться больше? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 12:05 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
IBExpert, апдейт всегда требовал 2 контекста - NEW и OLD ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 12:40 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
hvladапдейт всегда требовал 2 контекста - NEW и OLD Спасибо! Теперь все понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 13:00 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
dimitrчто есть лимит в 256 контекстов на запрос и что UPDATE OR INSERT использует три контекста интересно, а почему так ? казалось бы UPDATE-NEW и INSERT по сути один контекст, который можно использовать независимо от того, по какой причине вызван триггер? и до кучи, update or insert or delete будет использовать 4 контекста? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 13:52 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Ariochпо какой причине вызван триггер? вернее - по какой ветке пошло исполнение команды [/quot] и до кучи, update or insert or delete будет использовать 4 контекста?[/quot] это не читать, это меня уже переклинило ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 13:54 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
впрочем.... MERGE в тройке умеет и добавлять, и изменять, и удалять записи. MERGE в тройке может содержать НЕСКОЛЬКО update-команд тогда сколько же контекстов съедает MERGE ? можно ли получить количество потребных контекстов как результат prepare statement ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 13:57 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Ariochтогда сколько же контекстов съедает MERGE ? Может съесть сколько угодно вплоть до 255 даже в 2.5, т.к. запрос в USING может быть произвольной сложности. Ariochможно ли получить количество потребных контекстов как результат prepare statement ? Забей. В 4.0 вроде как лимит на количество контекстов будут увеличивать многократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 14:06 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
какой-бы лимит ни был, а он фиксированный так что для автогенераторов скриптов возможность отслеживать "сколько я уже контекстов потратил" и "не пора ли передёнуть" - был бы полезен IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 15:57 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Arioch, если он будет двухбайтовый, то это будет 65535. Я сомневаюсь, что ты такой длины запрос напишешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 16:00 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
см. первый пост в этой ветке и заметь, что я упомянул автогенераторы скриптов одним только апдейтом ( точнее одними апдейтами, повторёнными сколько надо) умудрились исчерпать контекст в общем, бутылочное горлышко есть, даже и 65K - тоже ограничение. а предупреждения о подходе к нему - нет ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 16:05 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Arioch, ошибку увидишь когда переборщишь. В 4.0 также собираются ввести batch api. Так что execute block со 100500 однотипными операторами должны уйти в прошлое. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2016, 16:15 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
Ну так и какое решение проблемы? Вставлять commit work каждые N записей в блоке? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 11:16 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
не помогло, пришлось разделять на несколько файлов ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 16:22 |
|
UPDATE OR INSERT в EXECUTE BLOCK
|
|||
---|---|---|---|
#18+
X11, всегда пользовал такую конструкцию: Код: plsql 1. 2. 3. 4.
Где oneRow : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 16:46 |
|
|
start [/forum/topic.php?fid=40&fpage=21&tid=1560638]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 169ms |
0 / 0 |