Перемещение данных из одной таблицы в другую Аналогичная таблица - PullRequest
1 голос
/ 03 мая 2011

Я обычно стараюсь избегать использования курсоров и циклического прохождения набора результатов, но как я могу сделать это в следующем сценарии без циклического перебора SomeTable и вставки строк по одной в MyTable?

ПростойСхема выглядит следующим образом:

MyTable
- Name  VARCHAR(20)
- Code1 CHAR(5)
- Code2 CHAR(5)

SomeTable
- Name      VARCHAR(20)
- SomeCode1 CHAR(10)
- SomeCode2 CHAR(10)

Оператор SQL:

INSERT INTO MyTable (Name, Code1, Code2)
SELECT Name, First Five Chars of SomeCode1 Only if SomeCode2 is not null or empty or doesn't have a certain value, SomeCode2
FROM SomeTable

Я делаю это внутри кода Java, но я не уверен, возможно ли сделать это в одном целом INSERT INTO SELECT заявление.Я почти близок к написанию цикла for с одиночными операторами INSERT.Должен ли я создать какую-то функцию в базе данных или ..?Я использую DB2.

Ответы [ 3 ]

1 голос
/ 04 мая 2011
INSERT INTO MyTable (Name, Code1, Code2)
SELECT Name, 
  CASE When coalesce(SomeCode2, '')='' Then NULL
       When SomeCode2=@somevalue Then NULL
       Else substring(SomeCode1, 1, 5)
, SomeCode2
FROM SomeTable
0 голосов
/ 04 мая 2011

Если вам нужны нулевые записи, когда они не найдены:

insert into MyTable (Name, Code1, Code2)
select
  Name,
  if(not isnull(SomeCode2) and SomeCode2 != ''
     and SomeCode2 != 'foo', substring(SomeCode1,1,5), null),
  SomeCode2
  from SomeTable
;

-или-

Если вы не хотите, чтобы какая-либо строка существовала, когда записи не найдены:

insert into MyTable (Name, Code1, Code2)
select
  Name,
  substring(SomeCode1, 1, 5),
  SomeCode2
  from SomeTable
  where not isnull(SomeCode2) and SomeCode2 != '' and SomeCode2 != 'foo'
;
0 голосов
/ 04 мая 2011
insert into MyTable (Name, Code1, Code2)
select Name, case when (SomeCode2 is not null and length(trim(SomeCode2)) <> 0) then substr(SomeCode1, 0, 5) end, SomeCode2 from SomeTable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...