2012-04-03 2 views
1

У меня есть таблица, называемая «отчет», которая содержит идентификаторы отчетов и их соответствующие коды расширения. В настоящее время в качестве примера единственным расширением для каждого идентификатора является «TXT». Я пытаюсь вставить новое расширение ('RTF') в каждый существующий идентификатор отчета. Вот мой код:Не вставлять новые записи

merge into report a 
     using (select x.rpt_id as value1, 'RTF' as value2 
      from report x 
      where x.extension <> 'RTF') b 
     on (a.rpt_id = b.value1) 
when not matched then 
     insert values (b.value1, b.value2); 

я не получаю никаких ошибок, но ничто не вставляется ...

ответ

2

Было бы полезно, чтобы опубликовать выборку данных, прежде чем запустить заявление (всего лишь пример, из курс) и нужные данные после запуска вашего заявления.

Похоже, что вы ищете что-то вроде

INSERT INTO report(rpt_id, extension) 
    SELECT rpt_id, 'RTF' 
    FROM report 
    WHERE extension != 'RTF' 

Если первичный ключ является фактически составной ограничение на комбинации rpt_id и extension, и ваша цель состоит в том, чтобы принять вашу таблицу N отчетов каждый с расширение TXT и создание N новых строк с тем же rpt_id и расширением `RTF ', это сработает.

SQL> create table report(
    2 rpt_id number, 
    3 extension varchar2(3), 
    4 constraint extension_pk primary key(rpt_id, extension) 
    5 ); 

Table created. 

SQL> insert into report values(1, 'TXT'); 

1 row created. 

SQL> insert into report values(2, 'TXT'); 

1 row created. 

SQL> insert into report values(3, 'TXT'); 

1 row created. 

SQL> insert into report values(4, 'TXT'); 

1 row created. 

SQL> insert into report values(5, 'TXT'); 

1 row created. 

SQL> select * from report; 

    RPT_ID EXT 
---------- --- 
     1 TXT 
     2 TXT 
     3 TXT 
     4 TXT 
     5 TXT 

SQL> insert into report(rpt_id, extension) 
    2 select rpt_id, 'RTF' 
    3  from report 
    4  where extension != 'RTF'; 

5 rows created. 

SQL> select * from report; 

    RPT_ID EXT 
---------- --- 
     1 RTF 
     1 TXT 
     2 RTF 
     2 TXT 
     3 RTF 
     3 TXT 
     4 RTF 
     4 TXT 
     5 RTF 
     5 TXT 

10 rows selected. 

На основании ошибки вы получаете, это, конечно, кажется, что первичный ключ не определен на сочетании rpt_id и extension.

+0

Привет, благодарю вас за ответ. Я пробовал выше, но получаю ошибку «уникальное ограничение ограничений (extension_pk)». Достаточно ли данных проб? rpt_id = r00001, r00002, r00003, r00004, r00005 extension (все из них) = 'TXT' – cloudcalculus

+0

@racer - И что вы хотите, чтобы конечный результат находился в таблице? Если вы начинаете с 5 строк, вы хотите завершить 10 строк? Если это так, то, основываясь на ошибке, я предполагаю, что «RPT_ID» является основным ключом таблицы, означающим, что у вас не может быть двух строк: одна с расширением RTF, а другая с расширением TXT. Но, похоже, именно об этом вы и просили. –

+0

Да, это я хочу, но как это работает, так это то, что Первичный ключ - это пара rpt_id и расширения. – cloudcalculus

Смежные вопросы