таблица NISHAN.TBL_ADMIN мутирует, триггер / функция может ее не видеть - PullRequest
0 голосов
/ 01 июня 2018

У меня есть триггер с именем tr_admin_user_role, который автоматически вставляет значения в таблицу tbl_user_role, когда мы выполняем вставку в другую таблицу с именем tbl_admin.Нет ошибки во время компиляции, но всякий раз, когда я вставляю значение в таблицу tbl_admin, она показывает мне ошибку, и ошибка похожа на

enter image description here

Этомоя таблица tbl_admin

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)
);

таблица tbl_user_role таблица

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');

1 Ответ

0 голосов
/ 01 июня 2018

Это не то, как вы извлекаете недавно вставленное / обновленное / предыдущее значение столбца в триггере.Вы должны использовать :OLD.column_name и :NEW.column_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_id и user_role_id, поскольку они объявлены как PRIMARY KEY s
, и вы не включаете их в свои вставки.

Db fiddle demo

Здесь я использовал фиктивные значения для этих столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...