powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Импорт в связанную таблицу
6 сообщений из 6, страница 1 из 1
Импорт в связанную таблицу
    #37426098
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже туплю, не могу разобраться как импортировать данные из файла в следующей ситуации:
файл с разделителями
Код: plaintext
1.
2.
3.
name1,serial1
name2,serial2
...
надо импортировать в таблицу
Код: plaintext
1.
2.
3.
create table table1 (id int generated always,
                        id_ext int,
                        serial varchar( 10 )) 
поле id_ext есть внешний ключ таблицы
Код: plaintext
1.
2.
create table table2 (id_ext int generated always,
                            name varchar( 10 )) 
то есть файл-ресурс содержит поля 2-х связанных таблиц. Требуется импортировать в table1 по связанному полю id_ext, причем если запись есть в table2, то вставляется найденный идентификатор, если нет - то в table2 добавляется новая запись.
...
Рейтинг: 0 / 0
Импорт в связанную таблицу
    #37426111
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так же модификация запроса на игнорирование вставки в случае отсутствия записи в table2
...
Рейтинг: 0 / 0
Импорт в связанную таблицу
    #37426123
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы действовал так:

1. LOAD данные в третью (вспомогательную) таблицу
2. LOAD ... FROM CURSOR... из третьей во вторую, добавляем недостающие name.
3. LOAD ... FROM CURSOR... из третьей во первую.

потому что так удобнее - можно пользоваться SQL-выражениями.

Второй и третий шаг не так просты из-за generated always (надо будет
* позаботиться о неналожении
* позаботиться об Integrity
* передвинуть счётчик), но, в принципе, это верный план.
...
Рейтинг: 0 / 0
Импорт в связанную таблицу
    #37426447
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rust(),

Код: 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.
create view t1_t2 (name, serial) as 
values (cast(null as varchar( 10 )), cast(null as varchar( 10 )))@

create trigger t1_t2
instead of insert on t1_t2
referencing new as n
for each row
begin atomic
  declare l_id_ext int;
  
  insert into table1 (id_ext, serial)
  select t2.id_ext, n.serial
  from table2 t2 
  where t2.name=n.name;
  
  -- если нет записи в table2 и надо игнорировать вставку - 
  -- выкиньте из триггера всё (вместе с begin atomic и end), 
  -- исключая предыдущий insert
  set l_id_ext = (
  select id_ext
  from new table (
  insert into table2 (name)
  select name
  from table(values n.name) n(name)
  where not exists (select  1  from table2 t2 where t2.name=n.name)
  ));
  
  if (l_id_ext is not null) then
    insert into table1 (id_ext, serial) values (l_id_ext, n.serial);
  end if;
end
@
Теперь вы можете делать import или insert в представление t1_t2 так же, как в обычную таблицу.
...
Рейтинг: 0 / 0
Импорт в связанную таблицу
    #37426735
Rust()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после создания представления t1_t2
при импорте
Код: plaintext
1.
IMPORT FROM "file" OF DEL METHOD P ( 2 ,  3 ) MESSAGES "err" INSERT INTO t1_t2 
выдается ошибка

SQL3193N Заданную производную таблицу или материализованную таблицу запроса нельзя исправить. Нельзя выполнить операцию LOAD/IMPORT для этой производной таблицы или операцию LOAD для материализованной таблицы запроса.

Версия DB2 8.2.
...
Рейтинг: 0 / 0
Импорт в связанную таблицу
    #37426808
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rust()после создания представления t1_t2
при импорте
Код: plaintext
1.
IMPORT FROM "file" OF DEL METHOD P ( 2 ,  3 ) MESSAGES "err" INSERT INTO t1_t2 
выдается ошибка

SQL3193N Заданную производную таблицу или материализованную таблицу запроса нельзя исправить. Нельзя выполнить операцию LOAD/IMPORT для этой производной таблицы или операцию LOAD для материализованной таблицы запроса.

Версия DB2 8.2.Виноват.
Забыл, что глупый import проверяет view на возможность её изменения.
Надо подсунуть представлению таблицу:
Код: plaintext
1.
2.
create table t1_t2_t (name varchar( 10 ), serial varchar( 10 )) in userspace1@
create view t1_t2 (name, serial) as select name, serial from t1_t2_t@
create trigger t1_t2 ... @

Модератор: Тема перенесена из форума "IBM DB2, WebSphere, IMS, U2, etc".
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Импорт в связанную таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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