我遇到触发器问题我尝试在数据库中插入一些数据
以下是我试图插入的数据
INSERT INTO login (login, senha) VALUES ('admin', 'admin')
错误
ORA-04098: trigger 'HOTEL.bi_login' is invalid and failed re-validation
表和序列
CREATE TABLE login(idLogin NUMBER(5), login VARCHAR2(50) UNIQUE, SENHA VARCHAR2(50), CONSTRAINT idLogin_pk PRIMARY KEY (idLogin));
CREATE sequence "login_seq";
和Triger
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;
答案 0 :(得分:0)
你缺少几个分号,你变量的声明应该是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
我发现它更简单,更优雅:)
泰德。
答案 1 :(得分:0)
我已经测试了ExDev第二种解决方案,它运行良好。
它可能不适合您,因为您创建了同时触发的错误状态的其他触发器。因此,当您尝试插入时,它们会被执行,因此您会收到错误。
解决方案:检查是否在过去尝试中创建了其他触发器处于错误状态并删除它们。之后尝试ExDev建议的解决方案。