ステートメントを実行する前にデータのサンプル(もちろんサンプルのみ)を投稿し、ステートメントを実行した後に目的のデータを投稿すると便利です。
あなたは次のようなものを探しているようですね
INSERT INTO report( rpt_id, extension )
SELECT rpt_id, 'RTF'
FROM report
WHERE extension != 'RTF'
主キーが実際にはとの組み合わせに対する複合制約でrpt_id
ありextension
、それぞれが拡張子のあるN個のレポートのテーブルを取得し、同じ拡張子が「RTF」のTXT
N個の新しい行を作成することが目標である場合、これは機能します。 rpt_id
。
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
。