【发布时间】:2015-08-18 10:36:32
【问题描述】:
我想问一下 Oracle 中的 DML 错误记录 我有一个具有这种结构的原始表
table_test(
ID Int PK,
test_time date
)
我还为此创建了一个错误记录表 ERR$_table_test
据我所知,ERR$_table_test 中的字段 'ID' 和 'test_time' 是 VARCHAR(4000)
举个例子
1. Insert into table_test values (1,to_date('18/08/2015 15:00:00' , 'dd/mm/yyyy hh24:mi:ss'))
==> 成功,插入 1 行
2. Insert into table_test values (1,to_date('18/08/2015 15:00:00' , 'dd/mm/yyyy hh24:mi:ss'))
==> 在 table_test 中插入 0 行,在 ERR$_table_test 中插入 1 行,但出现此错误:ORA-00001:违反唯一约束
3. select * from ERR$_table_test
找到 1 条记录:但字段 test_time 是 '18/08/2015' 没有时间
之后,我尝试更改表 ERR$_table_test
alter table ERR$_table_test modify test_time date
我重做上面的例子
这次我得到了 ERR$_table_test 中 test_time 的完整时间戳
但是,那我试试
Insert into table_test values (2,to_date('abc xyz' , 'dd/mm/yyyy hh24:mi:ss'))
==> 在 ERR$_table_test 中插入错误类型时发生 SQL 错误
这是我关心的事情
我能否在不更改列类型的情况下在 ERR$_table_test 中获得完整的时间戳?
如果我必须将列类型更改为 DATE,当时间格式错误时,我是否仍会收到第二种情况的错误日志?
感谢您的支持,
【问题讨论】:
-
您是否尝试在插入之前在会话中运行
alter session set nls_date_format = 'dd/mm/yyyy hh24:mi:ss');?
标签: database oracle logging dml