如何校验 MySQL&Oracle 时间字段合规性?

作者:余振兴

爱可生 DBA 团队成员,热衷技术分享、编写技术文档。

本文来源:原创投稿

  • 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

背景信息

在数据迁移或者数据库低版本升级到高版本过程中,经常会遇到一些由于低版本数据库参数设置过于宽松,导致插入的时间数据不符合规范的情况而触发报错,每次报错再发现处理起来较为麻烦,是否有提前发现这类不规范数据的方法,以下基于 Oracle 和 MySQL 各提供一种可行性方案作为参考。

Oracle 时间数据校验方法

2.1 创建测试表并插⼊测试数据

CREATE TABLE T1(ID NUMBER,CREATE_DATE VARCHAR2(20));

INSERT INTO T1 SELECT 1, '2007-01-01' FROM DUAL;
INSERT INTO T1 SELECT 2, '2007-99-01' FROM DUAL;            -- 异常数据
INSERT INTO T1 SELECT 3, '2007-12-31' FROM DUAL;
INSERT INTO T1 SELECT 4, '2007-12-99' FROM DUAL;            -- 异常数据
INSERT INTO T1 SELECT 5, '2005-12-29 03:-1:119' FROM DUAL;  -- 异常数据
INSERT INTO T1 SELECT 6, '2015-12-29 00:-1:49' FROM DUAL;   -- 异常数据

2.2 创建对该表的错误日志记录

  • Oracle 可以调用 DBMS_ERRLOG.CREATE_ERROR_LOG 包对 SQL 的错误进行记录,用来记录下异常数据的情况,十分好用。

  • 参数含义如下

    • T1 为表名
    • T1_ERROR 为对该表操作的错误记录临时表
    • DEMO 为该表的所属用户