ORA-04098: 触发器无效且重新验证失败
ORA-04098: trigger is invalid and failed re-validation
我在使用触发器时遇到问题 我尝试在数据库中插入一些数据
这是我要插入的数据
INSERT INTO login (login, senha) VALUES ('admin', 'admin')
错误
ORA-04098: trigger 'HOTEL.bi_login' is invalid and failed re-validation
table和序列
CREATE TABLE login(idLogin NUMBER(5), login VARCHAR2(50) UNIQUE, SENHA VARCHAR2(50), CONSTRAINT idLogin_pk PRIMARY KEY (idLogin));
CREATE sequence "login_seq";
还有扳机
CREATE trigger "bi_login"
before insert on login
for each row
DECLARE
qntdRows DATATYPE
BEGIN
select "login_seq".nextval
INTO qntdRows
FROM dual;
:NEW.idLogin = qntdRows
END;
你少了几个分号,变量的声明应该是 NUMBER。
请看下面正确的代码:
CREATE OR REPLACE trigger "bi_login"
before insert on login
for each row
DECLARE
qntdRows number;
BEGIN
select "login_seq".nextval
INTO qntdRows
FROM dual;
:NEW.idLogin := qntdRows;
END;
以上内容将替换您的无效触发器并且编译时不会出现任何错误!
此外,您可以使用以下备用代码实现相同的目的:
CREATE OR REPLACE trigger "bi_login"
before insert on login
for each row
BEGIN
:NEW.idLogin := "login_seq".nextval;
END;
Successful Compilation Screenshot
我觉得它更简洁优雅:)
泰德
我已经测试了 ExDev 第二种解决方案,它运行良好。
它可能对您不起作用,因为您创建了同时触发的处于错误状态的其他触发器。因此,当您尝试插入它们时,它们会被执行,并且您会因为它们而收到错误。
解决方案:检查您是否在过去的错误状态尝试中创建了其他触发器并删除它们。之后尝试 ExDev 建议的解决方案。
我在使用触发器时遇到问题 我尝试在数据库中插入一些数据
这是我要插入的数据
INSERT INTO login (login, senha) VALUES ('admin', 'admin')
错误
ORA-04098: trigger 'HOTEL.bi_login' is invalid and failed re-validation
table和序列
CREATE TABLE login(idLogin NUMBER(5), login VARCHAR2(50) UNIQUE, SENHA VARCHAR2(50), CONSTRAINT idLogin_pk PRIMARY KEY (idLogin));
CREATE sequence "login_seq";
还有扳机
CREATE trigger "bi_login"
before insert on login
for each row
DECLARE
qntdRows DATATYPE
BEGIN
select "login_seq".nextval
INTO qntdRows
FROM dual;
:NEW.idLogin = qntdRows
END;
你少了几个分号,变量的声明应该是 NUMBER。
请看下面正确的代码:
CREATE OR REPLACE trigger "bi_login"
before insert on login
for each row
DECLARE
qntdRows number;
BEGIN
select "login_seq".nextval
INTO qntdRows
FROM dual;
:NEW.idLogin := qntdRows;
END;
以上内容将替换您的无效触发器并且编译时不会出现任何错误!
此外,您可以使用以下备用代码实现相同的目的:
CREATE OR REPLACE trigger "bi_login"
before insert on login
for each row
BEGIN
:NEW.idLogin := "login_seq".nextval;
END;
Successful Compilation Screenshot
我觉得它更简洁优雅:)
泰德
我已经测试了 ExDev 第二种解决方案,它运行良好。
它可能对您不起作用,因为您创建了同时触发的处于错误状态的其他触发器。因此,当您尝试插入它们时,它们会被执行,并且您会因为它们而收到错误。
解决方案:检查您是否在过去的错误状态尝试中创建了其他触发器并删除它们。之后尝试 ExDev 建议的解决方案。