我创建了一个表 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
命令时它会显示
“没有错误”
我哪里出错了?
答案 0 :(得分:0)
对我来说没问题:
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
表示 分钟