DML过程中记录错误日志
当你插入几百万数据时,因为有几条脏数据而导致插入失败,是不是非常恼火。Oracle 10g R2之后有个新功能,将插入过程中失败的记录
当你插入几百万数据时,因为有几条脏数据而导致插入失败,是不是非常恼火。Oracle 10g R2之后有个新功能,,将插入过程中失败的记录插入到另一张表中。
SQL> drop table test purge;
SQL> drop table test_bad purge;
SQL> create table test as select * from dba_objects where 11;
SQL> execute dbms_errlog.create_error_log('test','test_bad');
create table TEST
(
OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(128),
SUBOBJECT_NAME VARCHAR2(30),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE VARCHAR2(19),
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19),
STATUS VARCHAR2(7),
TEMPORARY VARCHAR2(1),
GENERATED VARCHAR2(1),
SECONDARY VARCHAR2(1),
NAMESPACE NUMBER,
EDITION_NAME VARCHAR2(30)
);
create table TEST_BAD
(
ORA_ERR_NUMBER$ NUMBER,
ORA_ERR_MESG$ VARCHAR2(2000),
ORA_ERR_ROWID$ UROWID(4000),
ORA_ERR_OPTYP$ VARCHAR2(2),
ORA_ERR_TAG$ VARCHAR2(2000),
OWNER VARCHAR2(4000),
OBJECT_NAME VARCHAR2(4000),
SUBOBJECT_NAME VARCHAR2(4000),
OBJECT_ID VARCHAR2(4000),
DATA_OBJECT_ID VARCHAR2(4000),
OBJECT_TYPE VARCHAR2(4000),
CREATED VARCHAR2(4000),
LAST_DDL_TIME VARCHAR2(4000),
TIMESTAMP VARCHAR2(4000),
STATUS VARCHAR2(4000),
TEMPORARY VARCHAR2(4000),
GENERATED VARCHAR2(4000),
SECONDARY VARCHAR2(4000),
NAMESPACE VARCHAR2(4000),
EDITION_NAME VARCHAR2(4000)
);
SQL> insert into test(owner) values(lpad('1',31,'aa'))
log errors into test_bad;
insert into test(owner) values(lpad('1',31,'aa'))
*
第 1 行出现错误:
ORA-12899: 列 "LCAM_TEST"."TEST"."OWNER" 的值太大 (实际值: 31, 最大值: 30)
SQL> insert into test(owner) values(lpad('2',30,'bb'))
log errors into test_bad;
已创建 1 行。
SQL> col ORA_ERR_NUMBER format a8;
SQL> col ORA_ERR_MESG$ format a50;
SQL> col OWNER format a20;
SQL> select to_char(ORA_ERR_NUMBER$) as ORA_ERR_NUMBER, ORA_ERR_MESG$, OWNER from test_bad;
ORA_ERR_ ORA_ERR_MESG$ OWNER
-------- -------------------------------------------------- --------------------
12899 ORA-12899: 列 "LCAM_TEST"."TEST"."OWNER" 的值太大 aaaaaaaaaaaaaaaaaaaa
(实际值: 31, 最大值: 30) aaaaaaaaaa1
SQL> select count(1) from test;
COUNT(1)
----------
1
SQL> drop table test1 purge;
SQL> drop table test_bad1 purge;
SQL> create table test1 as select * from dba_objects where 11;
SQL> alter table test1 modify object_id number(2);
SQL> execute dbms_errlog.create_error_log('test1','test_bad1');
SQL> insert into test1 select * from dba_objects
log errors into test_bad1;
insert into test1 select * from dba_objects
*
第 1 行出现错误:
ORA-01438: 值大于为此列指定的允许精度
SQL> select count(1) from test1;
COUNT(1)
----------
0
SQL> select count(1) from dba_objects where length(object_id) COUNT(1)
----------
106
--可以看到,上面的语句一有错误就回滚,需要写出下列语句
SQL> insert into test1 select * from dba_objects
log errors into test_bad1
reject limit unlimited;
已创建106行。
SQL> select count(1) from test1;
COUNT(1)
----------
106
SQL> select count(1) from dba_objects where length(object_id) COUNT(1)
----------
106
需要说明的是:
1.插入到错误日志是自治事务,不会影响主事务。
2.使用log error并不会使append失效,但写error不会使用直接路径插入。
3.违反唯一键或约束的更新运算会导致失败回滚。
Oracle DML流程
PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决
MySQL常用DDL、DML、DCL语言整理(附样例)
Oracle基本事务和ForAll执行批量DML练习
Oracle DML语句(insert,update,delete) 回滚开销估算
本文永久更新链接地址:

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

选择MySQL的原因是其性能、可靠性、易用性和社区支持。1.MySQL提供高效的数据存储和检索功能,支持多种数据类型和高级查询操作。2.采用客户端-服务器架构和多种存储引擎,支持事务和查询优化。3.易于使用,支持多种操作系统和编程语言。4.拥有强大的社区支持,提供丰富的资源和解决方案。

MySQL是一种开源的关系型数据库管理系统,主要用于快速、可靠地存储和检索数据。其工作原理包括客户端请求、查询解析、执行查询和返回结果。使用示例包括创建表、插入和查询数据,以及高级功能如JOIN操作。常见错误涉及SQL语法、数据类型和权限问题,优化建议包括使用索引、优化查询和分表分区。

Oracle 中,FOR LOOP 循环可动态创建游标, 步骤为:1. 定义游标类型;2. 创建循环;3. 动态创建游标;4. 执行游标;5. 关闭游标。示例:可循环创建游标,显示前 10 名员工姓名和工资。

MySQL适合Web应用和内容管理系统,因其开源、高性能和易用性而受欢迎。1)与PostgreSQL相比,MySQL在简单查询和高并发读操作上表现更好。2)相较Oracle,MySQL因开源和低成本更受中小企业青睐。3)对比MicrosoftSQLServer,MySQL更适合跨平台应用。4)与MongoDB不同,MySQL更适用于结构化数据和事务处理。

可以通过 EXP 实用程序导出 Oracle 视图:登录 Oracle 数据库。启动 EXP 实用程序,指定视图名称和导出目录。输入导出参数,包括目标模式、文件格式和表空间。开始导出。使用 impdp 实用程序验证导出。

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

Oracle 日志文件写满时,可采用以下解决方案:1)清理旧日志文件;2)增加日志文件大小;3)增加日志文件组;4)设置自动日志管理;5)重新初始化数据库。在实施任何解决方案前,建议备份数据库以防数据丢失。

Oracle不仅是数据库公司,还是云计算和ERP系统的领导者。1.Oracle提供从数据库到云服务和ERP系统的全面解决方案。2.OracleCloud挑战AWS和Azure,提供IaaS、PaaS和SaaS服务。3.Oracle的ERP系统如E-BusinessSuite和FusionApplications帮助企业优化运营。
