6

一意の列を持つテーブルに挿入するメソッドを実行しています。私が知らないのは、挿入を失敗させた挿入値にアクセスできるかどうかです。

例えば:

table1(id,name, phone);

name is unique.

insert (1,a,123);

insert (2,a,1234);

私が望むのは、2番目の挿入を行うときに、クエリを繰り返すことなくid値「1」を返すことです。

前もって感謝します。

4

2 に答える 2

6

Oracle 10g r2 から、 insertコマンドのlog errors句を使用して、エラーを別のテーブルに記録できます。次に例を示します。

SQL> create table test_table(
  2    id   number primary key,
  3    col1 varchar2(7)
  4  )
  5  ;

Table created


-- creates a table for logging errors (table name will be prefaced with err$_)
SQL> begin dbms_errlog.create_error_log('TEST_TABLE'); end;
  2  /

PL/SQL procedure successfully completed

-- violates primary key constraint
SQL> insert into test_table(id, col1)
  2  (  select 1, level
  3      from dual
  4    connect by level <= 3)
  5    log errors reject limit unlimited;

1 row inserted

SQL> commit;

SQL> select * from test_table;

        ID COL1
---------- -------
         1 1


SQL> select * from err$_test_table;

ORA_ERR_NUMBER$ ORA_ERR_MESG$                                           ORA_ERR_ROWID$  ORA_ERR_OPTYP$ ORA_ERR_TAG$ ID  COL1
--------------- ------------------------------------------------------------------------------------------------------------
              1 ORA-00001: unique constraint (HR.SYS_C008315) violated  I                                            1     2
              1 ORA-00001: unique constraint (HR.SYS_C008315) violated  I                                            1     3
于 2012-12-12T13:59:47.397 に答える
0

おそらく、挿入が行われるテーブルに(挿入前に)トリガーを書き込むことができます。これで、列の値(名前)がテーブルに既に存在するかどうかを確認できます。その場合は、この重複レコードを別のテーブルに挿入して、さらに参照することができます

別のアプローチは、名前がチェックされ、重複した名前がテーブルに格納される可能性があるプロシージャに挿入を記述することです。

それが役に立てば幸い

于 2012-12-12T11:27:27.457 に答える