powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Одновременная вставка в таблицы DB2
15 сообщений из 15, страница 1 из 1
Одновременная вставка в таблицы DB2
    #34097992
power-baa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть две таблицы MASTER и DETAIL
В хранимой процедуре вставлется строка в таблицу MASTER.
Автоинкрементное поле автоматически устанавливает
уникальное значение первичного ключа.
Далее в этой же процедуре вставляются строки в таблицу DETAIL.
Внешний ключ этих строк должен соответствовать только что
сгенерированному первичному ключу таблицы DETAIL.
Как передать этот ключ перед вставкой в таблицу DETAIL ?
Может в DB2 существует стандартное решение такого вопроса ?
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34098125
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для таблицы
M(I INT GENERATED ALWAYS AS IDENTITY, V VARCHAR(10))
в процедуре можно сделать так:
Код: plaintext
1.
DECLARE V_I INT;
SELECT I INTO V_I FROM NEW TABLE(INSERT INTO M (V) VALUES('1'));
После этого селекта вы будете иметь 1 вставленную строку в M и сгенерированное значение для автоинкрементного поля для вставленной строки в локальной переменной V_I.
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34099479
power-baa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinДля таблицы
M(I INT GENERATED ALWAYS AS IDENTITY, V VARCHAR(10))
в процедуре можно сделать так:
Код: plaintext
1.
DECLARE V_I INT;
SELECT I INTO V_I FROM NEW TABLE(INSERT INTO M (V) VALUES('1'));
После этого селекта вы будете иметь 1 вставленную строку в M и сгенерированное значение для автоинкрементного поля для вставленной строки в локальной переменной V_I.

А существуют ли в DB2 механизмы, позволяющие добавлять записи в связанные таблицы одним sql запросом. Если автоматизировать, то по полной: зачем мне сначала получать сгенерированный идентификатор главной таблицы, а потом вставлять его в полдчиненную (2 запроса)? Можно ли этот процесс автоматизировать, например, вставить значения в 2 таблицы, а DB2 автоматом сгенерирует идентификатор и свяжет по нему эти 2 таблицы.
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34099778
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
CREATE TABLE M(I INT GENERATED ALWAYS AS IDENTITY, V VARCHAR( 10 ));
CREATE TABLE C(I INT, V VARCHAR( 10 ));
В процедуре:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE CNT INT;
WITH A AS 
(
SELECT I, V 
FROM NEW TABLE(INSERT INTO M (V) VALUES('MASTER'))
)
SELECT COUNT( 1 ) INTO CNT
FROM NEW TABLE(INSERT INTO C (I,V) SELECT I, 'CHILD' FROM A);
После этой команды вы будете иметь по 1 связанной строке в обеих таблицах.
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34101216
power-baa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinДля таблицы
M(I INT GENERATED ALWAYS AS IDENTITY, V VARCHAR(10))
в процедуре можно сделать так:
Код: plaintext
1.
DECLARE V_I INT;
SELECT I INTO V_I FROM NEW TABLE(INSERT INTO M (V) VALUES('1'));
После этого селекта вы будете иметь 1 вставленную строку в M и сгенерированное значение для автоинкрементного поля для вставленной строки в локальной переменной V_I.

Что-то не компилится эта вещь.
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34101242
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование WINT обязательно
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34101245
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WITH
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34101255
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообше-то... ))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
db2 => create table xxx (id int not null)
DB20000I  The SQL command completed successfully.
db2 => select * from new table ( insert into xxx (id ) values ( 1 ))

ID
-----------
           1 

   1  record(s) selected.

db2 =>
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34101261
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что, этот кусок кода ошибку вызывает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE M(I INT GENERATED ALWAYS AS IDENTITY, V VARCHAR( 10 ))@

CREATE PROCEDURE T1()
LANGUAGE SQL
BEGIN
 DECLARE V_I INT;
 SELECT I INTO V_I FROM NEW TABLE(INSERT INTO M (V) VALUES('1'));
END@
?
У вас версия базы и фикс какие?
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34101294
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
connect to test user db2admin using super-puper
@

BEGIN ATOMIC
	DECLARE VI INT;
	SET VI=(
     		SELECT ID FROM NEW TABLE
     			( INSERT INTO XXX (ID) VALUES( 1 ) )
	     	FETCH FIRST  1  ROW ONLY
		);
END
@
commit@
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34101313
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так тоже работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
BEGIN ATOMIC
        DECLARE VI INT;
        DECLARE TS TIMESTAMP;
        SET (VI,TS)=(
                SELECT ID,CURRENT TIMESTAMP FROM NEW TABLE
                        ( INSERT INTO XXX (ID) VALUES( 1 ) )
                FETCH FIRST  1  ROW ONLY
                );
END

DB20000I  The SQL command completed successfully.

commit
DB20000I  The SQL command completed successfully.

...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34102853
power-baa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinЧто, этот кусок кода ошибку вызывает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE M(I INT GENERATED ALWAYS AS IDENTITY, V VARCHAR( 10 ))@

CREATE PROCEDURE T1()
LANGUAGE SQL
BEGIN
 DECLARE V_I INT;
 SELECT I INTO V_I FROM NEW TABLE(INSERT INTO M (V) VALUES('1'));
END@
?
У вас версия базы и фикс какие?

База 8.1. Фиксов нет.
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34102971
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То, что я описал, работает, начиная с fp4.
Что вам мешает перейти на v8.2?
С тех пор вышло уже 13 фиксов на v8!
Вообще-то по опыту работы с DB2 могу сказать, что начинать серьезно работать c DB2 можно не раньше 3-5 фикса (от версии к версии номер увеличивается). :)
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34108954
power-baa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinТо, что я описал, работает, начиная с fp4.
Что вам мешает перейти на v8.2?
С тех пор вышло уже 13 фиксов на v8!
Вообще-то по опыту работы с DB2 могу сказать, что начинать серьезно работать c DB2 можно не раньше 3-5 фикса (от версии к версии номер увеличивается). :)

А FixPak надо все устанавливать от 1 до 13 ?
Или достаточно только 13 - й поставить ?
И они весят 500 - 800 MB ? Я не ошибся ?
...
Рейтинг: 0 / 0
Одновременная вставка в таблицы DB2
    #34109036
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последний они кумулятивны.

В принципе fixpack - дистрибутив DB2 (windows)
Его можно и без базовой версии ставить.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Одновременная вставка в таблицы DB2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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