oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项

在Oracle中,语句要么完全成功要么完全失败(它们是原子的).但是,您可以在某些情况下添加子句来记录异常而不是引发错误:

>使用BULK COLLECT – SAVE EXCEPTIONS,如this thread on askTom所示,

>或使用DBMS_ERRLOG(我认为10g以后可用).

第二种方法都是自动的,这是一个演示(使用11gR2):

SQL> CREATE TABLE test (pk1 NUMBER,

2 pk2 NUMBER,

3 CONSTRAINT pk_test PRIMARY KEY (pk1, pk2));

Table created.

SQL> /* Statement fails because of duplicate */

SQL> INSERT into test (SELECT 1, 1 FROM dual CONNECT BY LEVEL <= 2);

ERROR at line 1:

ORA-00001: unique constraint (VNZ.PK_TEST) violated

SQL> BEGIN dbms_errlog.create_error_log('TEST'); END;

2 /

PL/SQL procedure successfully completed.

SQL> /* Statement succeeds and the error will be logged */

SQL> INSERT into test (SELECT 1, 1 FROM dual CONNECT BY LEVEL <= 2)

2 LOG ERRORS REJECT LIMIT UNLIMITED;

1 row(s) inserted.

SQL> select ORA_ERR_MESG$, pk1, pk2 from err$_test;

ORA_ERR_MESG$ PK1 PK2

--------------------------------------------------- --- ---

ORA-00001: unique constraint (VNZ.PK_TEST) violated 1 1

您可以将LOG ERROR子句与INSERT ALL一起使用(感谢@Alex Poole),但您必须在每个表之后添加子句:

SQL> INSERT ALL

2 INTO test VALUES (1, 1) LOG ERRORS REJECT LIMIT UNLIMITED

3 INTO test VALUES (1, 1) LOG ERRORS REJECT LIMIT UNLIMITED

4 (SELECT * FROM dual);

0 row(s) inserted.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle是关系型数据库管理系统,是目前全球广泛使用的商业级数据库之一。在Oracle数据库管理系统中,插入操作是向表中插入新行(也就是新增数据)的一基本操作,可以使用INSERT语句实现。对于批量新增数据,我们可以通过以下方法实现: 方法一,使用INSERT INTO VALUES语句:这种方法适用于需要批量新增的数据已经存储在一个文件或程序中。我们可以编写一个程序,将需要新增的数据一条一条地按照INSERT INTO VALUES的格式拼接起来,并执行这些INSERT语句,将数据插入到数据库表中。 方法二,使用INSERT INTO SELECT语句:这种方法适用于需要批量新增的数据来源于另一个表格。我们可以编写一个SELECT语句,从原始表格中选择需要新增的数据,并将结果填入我们需要更新的表格中。这种方法可以在很短的时间内完成大量数据的新增工作。 无论使用哪种方法,批量新增数据时需要注意以下几点: 1. 数据的正确性:在执行批量新增操作前,必须确保新增的数据与要求一致,例如数据类型、数据长度等。 2. 数据的唯一性:在执行批量新增操作时,必须确保新增的数据在表格中不会出现重复。可以使用联合主键或唯一索引等手段保证数据的唯一性。 3. 事务控制:在执行批量新增操作时,需要考虑到是否需要使用事务控制。如果新增过程中出现错误,需要回滚操作,保证数据的完整性。 总之,Oracle批量新增数据insert操作是数据库管理系统中经常使用的操作之一,灵活运用可以提高工作效率和数据处理的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值