Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / INSERT, как одним предложением срздать несколько новых записей. / 3 сообщений из 3, страница 1 из 1
26.10.2005, 01:51
    #33343898
poiuytr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT, как одним предложением срздать несколько новых записей.
У меня есть 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
26.10.2005, 09:44
    #33344128
poiuytr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT, как одним предложением срздать несколько новых записей.
Похоже я уже нашёл ответ
Код: 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
26.10.2005, 10:28
    #33344261
nkulikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT, как одним предложением срздать несколько новых записей.
Можно вместо процедуры на оператор MERGE посмотреть...
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / INSERT, как одним предложением срздать несколько новых записей. / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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