2012-04-03 14 views
1

"レポート"と呼ばれるテーブルがあり、レポートIDとそれぞれの拡張コードが含まれています。現在、例として、各IDの唯一の拡張子は「TXT」です。既存の各レポートIDに新しい拡張( '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_idextensionの組み合わせで合成制約で、あなたの目標はNのあなたのテーブルを取ることであることをそれぞれが報告された場合ですねTXTの拡張子と同じrpt_idと拡張子が「RTF」のN個の新しい行を作成すると、これは機能します。あなたが取得しているエラーに基づいて

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_idextensionの組み合わせに定義されていないことが表示されます。

+0

こんにちは、ご返信ありがとうございます。私は上記を試みたが、私はエラー "ユニークな制約違反(extension_pk)"を取得します。これで十分なサンプルデータですか? rpt_id = r00001、r00002、r00003、r00004、r00005拡張子(すべて)= 'TXT' – cloudcalculus

+0

@racer - 最終結果をテーブルに入れたいですか? 5行から始める場合、10行で終了しますか?もしそうであれば、エラーに基づいて、私は 'RPT_ID'がテーブルの主キーであることを推測しています。つまり、2つの行を持つことはできません。つまり、RTFの拡張子とTXTの拡張子を持ちます。しかし、あなたが最初に求めていたように聞こえます。 –

+0

はい、そうですが、どのように動作するかは、主キーがrpt_idと拡張子のペアであることです。 – cloudcalculus

関連する問題