powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / многопоточная вставка строки в таблицу
14 сообщений из 14, страница 1 из 1
многопоточная вставка строки в таблицу
    #36598850
dizzy1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть программка которая должна вставлять в таблицу строку. Каким образом можно запросить у db2 идентификатор вставляемой строки, чтобы обеспечить возможность работы 2-х экземпляров программы в одно время без проблемной ситуации, сводящейся к тому, что они получат одинаковый идентификатор вставляемой строки и попытаются вставить одну и ту же строку.
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36598887
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE SEQUENCE

Код: plaintext
1.
INSERT INTO mytable (id, str) VALUES (NEXT VALUE FOR myseqname, 'sadfasdf');
INSERT INTO mytable (id, str) VALUES (NEXT VALUE FOR myseqname, 'fdjhsdkljfh');
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36598899
dizzy1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36600963
dizzy1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В продолжение темы. А как быть есть в таблицу может писать и другая программа. Можно ли как-то зарезервировать идентификатор перед вставкой строки с ним?
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36600995
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dizzy1984,

SEQUENCE именно это и делает.
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36601029
dizzy1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нипаняттна.
Допустим, я в своей программе создаю sequence за начало которой беру последнее значение идентификатора на текущий момент. Далее, до того как я перехожу к фазе выполнения запроса на вставку, пользователь сторонней программы вставляет строку с идентификатором, равным началу моей sequence. Затем я собственно вставляю строку используя "NEXT VALUE FOR myseqname". Что же произойдет? Неужели мне выдадется следующее свободное значение идентификатора?
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36601066
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SEQUENCE - ящик с номерками. Когда вы хотите сделать вставку, то вытаскиваете один и спокойно идёте вставлять. Другой программе или потоку будет выдан другой номер.
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36601546
dizzy1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, но как быть если другая программа не использует sequence. Можно ли как-то разрулить и эту ситуацию?
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36601759
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dizzy1984, что такоое "идентификатор вставляемой строки"? Если это - суррогатный ключ, тогда:
Таблица:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE S.T1 (
	ID INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY 
		(START WITH  1  INCREMENT BY  1  MINVALUE  1  NO CYCLE CACHE  10 ),
	NAME VARCHAR( 32 ) NOT NULL
);
ALTER TABLE S.T1 ADD CONSTRAINT "T1_PK" PRIMARY KEY ("ID");
Запрос:
Код: plaintext
select ID from new table ( insert into S.T1( NAME ) values( 'new_name' ) );
вставит запись и вернет свежесгенеряченный ID.
ID можно генерить и триггером, но IDENTITY или SEQUENCE гораздо эффективнее.
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36601839
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не забывайте про чудный select from insert. Можно управиться одним запросом с двумя задачами, и не нужно ничего резервировать.
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36601982
dizzy1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Идентификатор о котором идет речь - это ключ таблицы без возможности autoincrement. Поэтому нужно его явное значение в тексте запроса insert. Я рассматриваю ситуацию когда прикладная программа по какой-то малопонятной логике вставляет значения в таблицу, выбирая новые значения (больше максимального) этого ключа. Мне нужно делать то же самое но я боюсь что время от времени мы будет выбирать одинаковые значения этого ключевого поля. Сегодня поищу - возможно в бд есть sequence и она используется прикладной программкой, тогда и я бы ее тоже использовал. Если нет - вопрос открыт. Как узнать значение ключевого поля и зарезервировать его для последующего запроса insert.
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36602037
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб зря тему не заводить новую тут спрошу. Victor Metelitsa, при select from insert, если в insert возникает исключение, то получается блокировка. Можно её избежать?
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36602126
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный момент. Удачный insert обязан породить блокировк(у|и), но я до сих пор как-то особо не задумывался, что остаётся при неудачном. Кроме блокировки на вставленную запись, должна быть блокировка на таблицу... (поведение, конечно, зависит от уровня изоляции и опций).

Однако у меня грязную работу обычно выполняет GLORP (OR-framework для Smalltalk). Произошла неудача? Откатываем транзакцию, и после rollback мы ничего больше не блокируем.
...
Рейтинг: 0 / 0
многопоточная вставка строки в таблицу
    #36603478
dizzy1984
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В бд нашел порядка 30-ти sequence, думаю одна из них - моя. Если что, буду реинкарнировать тему... Всем спасибо!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / многопоточная вставка строки в таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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