我创建了一个表tr_startup_audit
然后我创建了一个触发器:
create or replace trigger tr_startup_audit
after startup on database
begin
insert into startup_audit values(
ora_sysevent,
sysdate,
TO_CHAR(sysdate, 'hh24:mm:ss'));
end;
/
当我编译它时,它显示
"警告:创建触发器时出现编译错误">
当我执行show err
命令时,它显示
"没有错误";
我哪里错了?
对我来说没问题:
SQL> create table startup_audit (event varchar2(30), datum date, sat varchar2(10));
Table created.
SQL> create or replace trigger tr_startup_audit
2 after startup on database
3 begin
4 insert into startup_audit values(
5 ora_sysevent,
6 sysdate,
7 TO_CHAR(sysdate, 'hh24:mm:ss'));
8 end;
9 /
Trigger created.
SQL>
但是:
为什么要单独存储时间组件?
DATE
数据类型(也意味着SYSDATE
函数,因为它返回DATE
(,包含日期和时间SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss'; Session altered. SQL> select sysdate from dual; SYSDATE ------------------- 06.07.2021 08:28:56
因此,您可以省略第7行,只存储
sysdate
(第6行(。当然,这意味着您也应该重新定义
startup_audit
表,并删除您现在用于存储"的列;无效";时间为什么它无效?继续阅读。您在
to_char
中使用的格式掩码错误。mm
用于个月,而mi
用于minute