powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / INSERT, как одним предложением срздать несколько новых записей.
3 сообщений из 3, страница 1 из 1
INSERT, как одним предложением срздать несколько новых записей.
    #33343898
poiuytr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть 2 таблицы, они связаны так, что с одной строкой таблицы T1 ассоциируются несколько строк таблицы Т2. DB2 версии 8 на AIX.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE TABLE T1
 (T1_ID      INTEGER  NOT NULL,
  T1_PARAM1  INTEGER  NOT NULL
 );
CREATE SEQUENCE t1_seq AS INTEGER START WITH  1  INCREMENT BY  1 ;
CREATE TABLE T2
 (T2_ID     INTEGER  NOT NULL  GENERATED BY DEFAULT
    AS IDENTITY (START WITH  1 , INCREMENT BY  1 , CACHE  20 , MINVALUE  1 , MAXVALUE  2147483647 , NO CYCLE, NO ORDER),
  T1_ID     INTEGER  NOT NULL,
  T2_PARAM  INTEGER
 );

ALTER TABLE T1
  ADD CONSTRAINT SQL051026001353080 PRIMARY KEY
   (T1_ID
   );

ALTER TABLE T2
  ADD CONSTRAINT SQL051026001419220 PRIMARY KEY
   (T2_ID
   );

ALTER TABLE T2
  ADD CONSTRAINT SQL051026001419300 FOREIGN KEY
   (T1_ID
   )
    REFERENCES T1
     (T1_ID
     )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
    ENFORCED
    ENABLE QUERY OPTIMIZATION;
Таблицы после одного инсерта должны выглядеть примерно так:
Код: plaintext
1.
2.
3.
4.
t1_id | t1_param   t2_id  |  t1_id  |  t2_param
------+---------   -------+---------+----------
1     | 5            1    |  1      |  4
                     2    |  1      |  5
                     3    |  1      |  6

Хочу оформить вставку в 2 таблицы в виде процедуры на SQL (в этом мне и нужна помощь). На входе процедуры будет значение t1_param и массив неопределённой длины t2_param. Что должно быть внутри процедуры? Я представляю как вставить процедурой одну запись, но как разобраться с массивом для второй таблицы? Вот что у меня уже есть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE PROCEDURE PROC_INSERT
 (OUT P_T1_ID INTEGER, 
  IN P_T1_PARAM INTEGER, 
  IN P_T2_PARAMS VARCHAR( 1024 )
 ) 
  SPECIFIC PROC_INSERT
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS

  p1: begin

  VALUES NEXTVAL FOR t1_seq INTO p_t1_id;
  INSERT INTO t1 (t1_id, t1_param) VALUES (p_t1_id, p_t1_param);

  -- что делать далее я не знаю, предполагал, что P_T2_PARAMS
-- будет строка вида '4, 5, 6', чтобы внутри процедуры получить 
-- with tmp (t2_param) AS (values ' || p_t2_params || ' ) 
-- select * from tmp и как-то сделать инсерт в таблицу T2.

 end p1;
Подскажите как мне сделать инсерт в T2?
Спасибо.
...
Рейтинг: 0 / 0
INSERT, как одним предложением срздать несколько новых записей.
    #33344128
poiuytr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже я уже нашёл ответ
Код: plaintext
1.
insert into t2 (t2_param, t1_id) 
with tmp (t2_param) AS (values  365 ,  366 ,  367 ) select tmp.*,  1  AS t1_id from tmp;
...
Рейтинг: 0 / 0
INSERT, как одним предложением срздать несколько новых записей.
    #33344261
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно вместо процедуры на оператор MERGE посмотреть...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / INSERT, как одним предложением срздать несколько новых записей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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