sql - PL/SQL 开发人员如何获取导致插入失败的行?

标签 sql oracle

我正在做一种插入到具有唯一列的表中的方法。我不知道的是我是否可以访问导致插入失败的插入值。

例如:

table1(id,name, phone);

name is unique.

insert (1,a,123);

insert (2,a,1234);

我想要的是当我进行第二次插入时返回 id 值 '1' 而不必重复查询。

先感谢您。

最佳答案

从 oracle 10g r2 开始,您可以使用 log errors insert的条款命令将错误记录在单独的表中。下面是一个例子:

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

关于sql - PL/SQL 开发人员如何获取导致插入失败的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13838446/

相关文章:

sql - mysql二进制比较不使用索引

sql - Ora SQL 查询 : joining without references

sql - Oracle-选择字段具有小写字符的位置

mysql - 通过算术和几何计算加速 SQL SELECT

SQL 查询 : Group by multiple columns in different tables

php - MAMP 上的 MySQL 表单无法正常工作

Oracle SQL 使用 Like 和通配符

用于 Oracle 访问的 Java 代码在执行期间失败。我该如何修复我的代码?

sql - Oracle SQL 沿着常规列返回 count(*) 列?

使用撇号时出现 SQL 错误