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);

我没有收到任何错误,但没有插入任何内容...

4

1 回答 1

2

在运行语句之前发布数据样本(当然只是一个样本)以及在运行语句之后发布所需的数据会很有帮助。

听起来你正在寻找类似的东西

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

如果主键实际上是对rpt_idand组合的复合约束extension,并且您的目标是获取 N 个报告的表,每个报告的TXT扩展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.

根据您收到的错误,显然主键未在 and 的组合上rpt_id定义extension

于 2012-04-03T22:27:59.400 回答