我希望能夠在我的表中插入數據。一旦數據被插入,人們只能更新整個表中的一列。我試圖在下面這個,但我得到的錯誤 - 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;
/
所以最後,我們只能在表格中插入數據後更新tableName的col4。如果我們這樣做:
INSERT INTO tableName VALUES(1,2,3,4);
1 row created
我只能做
UPDATE tableName
SET col4= 10
WHERE col1=1;
以下不會工作,本次更新:
UPDATE tableName
SET col2= 10
WHERE col1=1;
但我不知道如何計算出來。 謝謝。
'表格級別上的'grant insert',但'grant update'只在'列級別'上。 –