Я хочу иметь возможность вставлять данные в таблицу. Как только данные вставляются, люди могут только ОБНОВИТЬ один столбец во всей таблице. Я пытаюсь сделать это ниже, но получаю ошибку - ORA-04092: не может COMMIT или ROLLBACK в триггере:ORACLE PL/SQL - GRANT/REVOKE Привилегия
Вот мои триггеры. Моя идея заключалась в том, чтобы предоставить все привилегии, чтобы пользователь вставлял данные. После ввода данных удалите привилегию UPDATE только в одном столбце. Пусть говорят, что мы имеем эту таблицу:
CREATE TABLE tabelName(
col1 INTEGER,
col2 INTEGER,
col3 INTEGER,
col4 INTEGER
);
CREATE OR REPLACE TRIGGER TRG_TABLENAME_BI
BEFORE INSERT
ON TABLENAME
BEGIN
EXECUTE IMMEDIATE 'GRANT ALL ON TABLENAME TO PUBLIC';
END;
/
CREATE OR REPLACE TRIGGER TRG_TABLENAME_AI
AFTER INSERT
ON TABLENAME
BEGIN
EXECUTE IMMEDIATE 'REVOKE UPDATE (col1,col2,col3) TABLENAME to PUBLIC';
END;
/
Таким образом, в конце концов, мы можем только обновит COL4 из TABLENAME после вставки данных в таблице. Если мы делаем:
INSERT INTO tableName VALUES(1,2,3,4);
1 row created
я могу сделать только
UPDATE tableName
SET col4= 10
WHERE col1=1;
Это UPDATE ниже не будут работать:
UPDATE tableName
SET col2= 10
WHERE col1=1;
Но я не знаю, как понять это. Спасибо.
'Grant insert' на' уровне таблицы', но 'grant update' только на' уровне столбца'. –