Oracle 数据库 触发器 日期保存格式问题!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 数据库 触发器 日期保存格式问题!相关的知识,希望对你有一定的参考价值。

--创建一张表
create table emp2_log
(
uname varchar2(20), --记录执行的人
action varchar2(10), --记录执行的操作
atime date --记录执行的时间
);
--创建一个触发器
create or replace trigger trig
after insert or delete or update on emp2 for each row
begin
if inserting then
insert into emp2_log values(USER,'insert','YYYY-MM-DD HH:MI:SS');
elsif updating then
insert into emp2_log values(USER,'update','YYYY-MM-DD HH:MI:SS');
elsif deleting then
insert into emp2_log values(USER,'datele','YYYY-MM-DD HH:MI:SS');
end if;
end;
---执行操作
update emp2 set sal=sal*2 where deptno=30;
(这个时候发生报错,在('YYYY-MM-DD HH:MI:SS')填写sysdate 是可以正常的,
我想换个记录时间的格式.)

用to_char这个函数,前提是把你的atime date 字段改成varchar类型
to_char(sysdate,'YYYY-MM-DD HH:MI:SS')

insert into emp2_log values(USER,'update',to_char(sysdate,'YYYY-MM-DD HH:MI:SS'));

如果不用改,直接插入当前时间sysdate
在读出数据的时候用select col1,col2, to_chat(col3) from yourTable;
参考技术A 'YYYY-MM-DD HH:MI:SS'是一个字符串,根本也不是个日期型追问

UNAME ACTION ATIME
-------------------- ---------- ------------
SCOTT update 18-7月 -11
我是想把上面记录的时间格式,精确到小时,分,秒
2011年,7月18日 12:00 :34 这样的格式

如何让Oracle识别英文日期格式

学习Oracle时做练习,需要插入的表中有date类型的值比如'21-Jun-04',执行语句后报了这个错误ORA-01843: 无效的月份
之后作了修改alter session set nls_date_format='DD-MON-YY'还是报同样的错误
又作了修改alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
结果又报错误ORA-01858: 在要求输入数字处找到非数字字符
我也知道把sql语句里的英文月份改成中文的就行了,但我不想这样,因为我用的是sql脚本,一改一大堆太麻烦了,问问各位高手有没有解决办法啊?

TO_DATE ('21-Jun-04', 'dd-Mon-yy', 'NLS_DATE_LANGUAGE = American'),如果客户端是windows操作系统也可以修改注册表将NLS_LANG修改为AMERICAN_AMERICA.XXXXXX 参考技术A DNF 参考技术B alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss'
少了个:,在dd和hh中

以上是关于Oracle 数据库 触发器 日期保存格式问题!的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库如何改变日期格式

创建触发器以保存oracle中表的CONSTRAINTs更改

Oracle查询结果中的日期格式显示到毫秒数,如何去掉多余的数

oracle中如何转换时间格式

Oracle基本数据类型存储格式浅析—日期类型(3)

oracle 中日期的类型有哪些