一意の列を持つテーブルに挿入するメソッドを実行しています。私が知らないのは、挿入を失敗させた挿入値にアクセスできるかどうかです。
例えば:
table1(id,name, phone);
name is unique.
insert (1,a,123);
insert (2,a,1234);
私が望むのは、2番目の挿入を行うときに、クエリを繰り返すことなくid値「1」を返すことです。
前もって感謝します。
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
おそらく、挿入が行われるテーブルに(挿入前に)トリガーを書き込むことができます。これで、列の値(名前)がテーブルに既に存在するかどうかを確認できます。その場合は、この重複レコードを別のテーブルに挿入して、さらに参照することができます
別のアプローチは、名前がチェックされ、重複した名前がテーブルに格納される可能性があるプロシージャに挿入を記述することです。
それが役に立てば幸い