Oracle 表NISHAN.TBL_ADMIN正在变异,触发器/函数可能看不到它
我有一个名为Oracle 表NISHAN.TBL_ADMIN正在变异,触发器/函数可能看不到它,oracle,triggers,Oracle,Triggers,我有一个名为tr_admin_user_role的触发器,当我们在另一个名为tbl_admin的表中执行插入操作时,它会自动将值插入tbl_user_role表中。编译时没有错误,但每当我在tbl_admin表中插入一个值时,它就会显示一个错误,错误如下 这是我的tbl_管理表 CREATE TABLE tbl_admin( admin_id INTEGER, username VARCHAR2(50) NOT NULL UNIQUE, passwords VARCHA
tr_admin_user_role
的触发器,当我们在另一个名为tbl_admin
的表中执行插入操作时,它会自动将值插入tbl_user_role
表中。编译时没有错误,但每当我在tbl_admin
表中插入一个值时,它就会显示一个错误,错误如下
这是我的tbl_管理表
CREATE TABLE tbl_admin(
admin_id INTEGER,
username VARCHAR2(50) NOT NULL UNIQUE,
passwords VARCHAR2(50) NOT NULL,
email VARCHAR2(100) UNIQUE,
enabled CHAR(1) DEFAULT 1 NOT NULL,
created_at DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT pk_admin_id PRIMARY KEY(admin_id)
);
待定用户角色表
CREATE TABLE tbl_user_role(
user_role_id INTEGER,
username VARCHAR2(50) NOT NULL,
user_role VARCHAR2(50) DEFAULT 'ROLE_ADMIN' NOT NULL,
CONSTRAINT pk_user_role_id PRIMARY KEY(user_role_id)
);
我创建的触发器
CREATE OR REPLACE TRIGGER tr_admin_user_role
AFTER INSERT ON tbl_admin
FOR EACH ROW
DECLARE
new_username TBL_ADMIN.username%TYPE;
BEGIN
SELECT username INTO new_username FROM (
SELECT username FROM tbl_admin ORDER BY username DESC
) WHERE ROWNUM = 1;
INSERT INTO tbl_user_role(username, user_role) VALUES(new_username, 'ROLE_ADMIN');
END;
插入语句
INSERT INTO tbl_admin(username, passwords) VALUES('nisha', 'nisha');
这不是获取触发器中列的新插入/更新/先前值的方式。您应该使用
:OLD.column\u name
和:NEW.column\u name
引用新旧列值。阅读以了解更多信息
所以,你的触发器可以重写为
CREATE OR REPLACE TRIGGER tr_admin_user_role AFTER
INSERT ON tbl_admin
FOR EACH ROW
BEGIN
INSERT INTO tbl_user_role (
username,
user_role
) VALUES (
:NEW.username,
'ROLE_ADMIN'
);
END;
/
我假设您正在使用另一个触发器生成
admin\u id
和user\u role\u id
,因为它们被声明为主键
s并且您没有将它们包含在插入中 这里我对这些列使用了伪值