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
并且您没有将它们包含在插入中

这里我对这些列使用了伪值