In Oracle, you can only control read/write capability for an entire tablespace, not for a single table within a tablespace. So, if you want all the tables in a tablespace to be read-only, use the following command:
ALTER TABLESPACE READ ONLY;
To reverse the change and set all the tables in the tablespace back to read-write mode, use this code:
ALTER TABLESPACE READ WRITE;
Despite that limitation, you can simulate a read-only table by simply preventing all table modifications using a trigger. To do that, create a trigger as follows.
SQL> create or replace trigger emp_sal_read_only2 before insert or update or delete3 on emp_sal_tbl4 begin5 raise_application_error (-20001, 'Table EMP_SAL_TBL is read only, You cannot make changes to the data.');6 end;7 /Trigger created.
Here’s a test command that tries to alter the data, and the resulting output:
SQL> DELETE FROM EMP_SAL_TBL;DELETE FROM EMP_SAL_TBL*ERROR at line 1:ORA-20001: Table EMP_SAL_TBL is read only, You cannot make changes to the data.ORA-06512: at "SRIDHAR.EMP_SAL_READ_ONLY", line 2ORA-04088: error during execution of trigger 'SRIDHAR.EMP_SAL_READ_ONLY'