在工作中,常常要进行 oracle 数据的临时备份,还有导入数据的需求。但是却因为在源数据中个别数据不合法,导致无法插入。
功能效果:
- 把合法的数据导入进入目标表
- 把不合法的数据插入一张指定的表,并且记录下原因
1
2
3
4
5
6
7
8
9
10
| SQL> DESC dbms_errlog.create_error_log
Parameter Type Mode Default?
------------------- -------- ---- --------
DML_TABLE_NAME VARCHAR2 IN
ERR_LOG_TABLE_NAME VARCHAR2 IN Y
ERR_LOG_TABLE_OWNER VARCHAR2 IN Y
ERR_LOG_TABLE_SPACE VARCHAR2 IN Y
SKIP_UNSUPPORTED BOOLEAN IN Y
SQL>
--默认会创建ERR$_SOURCE表,在``第二个``参数可以自己输入表名
|
1
2
3
| BEGIN
DBMS_ERRLOG.create_error_log (dml_table_name => 'SOURCE');
END;
|
1
2
3
4
| INSERT INTO dest
SELECT *
FROM source
LOG ERRORS INTO err$_source('INSERT') REJECT LIMIT UNLIMITED;
|