【问题标题】:trying to create a trigger尝试创建触发器
【发布时间】:2020-04-24 04:43:22
【问题描述】:

我想创建一个触发器来存储将新行插入到我的员工表中的时间。 到目前为止,这是我的代码,但我不断收到错误。

触发器:

CREATE OR REPLACE TRIGGER insert_new_employee
AFTER INSERT ON employees
BEGIN
 insert into audit_cheker (date_create) values (sysdate());
END;

我的表来存储插入新元素时的时间:

create table audit_cheker(
date_create date
)

我收到的错误是

  1. 00000 - “触发器 '%s.%s' 无效并且重新验证失败”

原因:

试图检索触发器以执行,但 发现无效。这也意味着编译/授权 触发器失败。

行动:

选项用于解决编译/授权错误, 禁用触发器,或删除触发器。

【问题讨论】:

  • 。 . sysdate 不带括号。

标签: sql oracle triggers


【解决方案1】:

根据您迄今为止发布的信息,它应该起作用。这是一个测试用例:

SQL> create table audit_cheker
  2    (date_create date);

Table created.

SQL> create table employees as select empno, ename, deptno From emp;

Table created.

触发器:

SQL> CREATE OR REPLACE TRIGGER insert_new_employee
  2  AFTER INSERT ON employees
  3  BEGIN
  4   insert into audit_cheker (date_create) values (sysdate());
  5  END;
  6  /

Trigger created.

目前没有问题。让我们测试一下:

SQL> insert into employees (empno, ename, deptno) values (1, 'LF', 10);

1 row created.

SQL> select * from employees where empno = 1;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
         1 LF                 10

SQL> select * From audit_cheker;

DATE_CREATE
----------------
2020-04-24 07:18

如您所见,它有效

如果触发器无效,请尝试重新编译:

SQL> alter trigger insert_new_employee compile;

Trigger altered.

如果仍然没有帮助,请编辑您的初始消息(您发布的问题)并复制/粘贴您的 SQL*Plus 会话,以便我们可以看到您做了什么以及 Oracle 如何回复了。

【讨论】:

  • 这次我又试了一次,我想保存插入的人的用户名,所以我添加了一些东西。在创建触发器并且我想插入新记录后出现错误:04098. 00000 - “触发器'%s.%s' 无效并且重新验证失败” *原因:试图检索触发器执行,并被认定无效。这也意味着触发器的编译/授权失败。 *Action:选项是解决编译/授权错误、禁用触发器或删除触发器。
  • 您不理解“复制/粘贴您的 SQL*Plus 会话”的哪一部分?
猜你喜欢
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2011-03-09
  • 2021-10-16
  • 2020-09-06
  • 1970-01-01
  • 2012-07-30
相关资源
最近更新 更多