Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / многопоточная вставка строки в таблицу / 14 сообщений из 14, страница 1 из 1
26.04.2010, 16:30
    #36598850
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Есть программка которая должна вставлять в таблицу строку. Каким образом можно запросить у db2 идентификатор вставляемой строки, чтобы обеспечить возможность работы 2-х экземпляров программы в одно время без проблемной ситуации, сводящейся к тому, что они получат одинаковый идентификатор вставляемой строки и попытаются вставить одну и ту же строку.
...
Рейтинг: 0 / 0
26.04.2010, 16:39
    #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
26.04.2010, 16:44
    #36598899
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Спасибо
...
Рейтинг: 0 / 0
27.04.2010, 15:58
    #36600963
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
В продолжение темы. А как быть есть в таблицу может писать и другая программа. Можно ли как-то зарезервировать идентификатор перед вставкой строки с ним?
...
Рейтинг: 0 / 0
27.04.2010, 16:07
    #36600995
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
dizzy1984,

SEQUENCE именно это и делает.
...
Рейтинг: 0 / 0
27.04.2010, 16:19
    #36601029
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Нипаняттна.
Допустим, я в своей программе создаю sequence за начало которой беру последнее значение идентификатора на текущий момент. Далее, до того как я перехожу к фазе выполнения запроса на вставку, пользователь сторонней программы вставляет строку с идентификатором, равным началу моей sequence. Затем я собственно вставляю строку используя "NEXT VALUE FOR myseqname". Что же произойдет? Неужели мне выдадется следующее свободное значение идентификатора?
...
Рейтинг: 0 / 0
27.04.2010, 16:31
    #36601066
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
SEQUENCE - ящик с номерками. Когда вы хотите сделать вставку, то вытаскиваете один и спокойно идёте вставлять. Другой программе или потоку будет выдан другой номер.
...
Рейтинг: 0 / 0
27.04.2010, 19:23
    #36601546
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Да, но как быть если другая программа не использует sequence. Можно ли как-то разрулить и эту ситуацию?
...
Рейтинг: 0 / 0
27.04.2010, 22:16
    #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
27.04.2010, 23:27
    #36601839
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Не забывайте про чудный select from insert. Можно управиться одним запросом с двумя задачами, и не нужно ничего резервировать.
...
Рейтинг: 0 / 0
28.04.2010, 05:46
    #36601982
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Идентификатор о котором идет речь - это ключ таблицы без возможности autoincrement. Поэтому нужно его явное значение в тексте запроса insert. Я рассматриваю ситуацию когда прикладная программа по какой-то малопонятной логике вставляет значения в таблицу, выбирая новые значения (больше максимального) этого ключа. Мне нужно делать то же самое но я боюсь что время от времени мы будет выбирать одинаковые значения этого ключевого поля. Сегодня поищу - возможно в бд есть sequence и она используется прикладной программкой, тогда и я бы ее тоже использовал. Если нет - вопрос открыт. Как узнать значение ключевого поля и зарезервировать его для последующего запроса insert.
...
Рейтинг: 0 / 0
28.04.2010, 08:10
    #36602037
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Чтоб зря тему не заводить новую тут спрошу. Victor Metelitsa, при select from insert, если в insert возникает исключение, то получается блокировка. Можно её избежать?
...
Рейтинг: 0 / 0
28.04.2010, 09:33
    #36602126
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
многопоточная вставка строки в таблицу
Интересный момент. Удачный insert обязан породить блокировк(у|и), но я до сих пор как-то особо не задумывался, что остаётся при неудачном. Кроме блокировки на вставленную запись, должна быть блокировка на таблицу... (поведение, конечно, зависит от уровня изоляции и опций).

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


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