警告:触发器创建时有编译错误,没有显示错误

时间:2021-07-06 04:35:34

标签: oracle plsql triggers

我创建了一个表 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 命令时它会显示

<块引用>

“没有错误”

我哪里出错了?

1 个答案:

答案 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 表示 分钟