CREATE OR REPLACE TRIGGER table_name_readonly BEFORE DELETE OR INSERT OR UPDATE ON <schema.table_name> BEGIN RAISE_APPLICATION_ERROR(-20999, 'The table is READ ONLY'); END; /
Following is to generate scripts for all tables within a schema.
SET PAGESIZE 0 SET LINESIZE 150 SELECT 'CREATE OR REPLACE TRIGGER ' || lower(table_name) || '_readonly ' || chr(10) || 'BEFORE DELETE OR INSERT OR UPDATE ON ' || lower(owner) || '.' || lower(table_name) || chr(10) || 'BEGIN' || chr(10) ||' RAISE_APPLICATION_ERROR(-20999,' || chr(39) || 'Table : ' || lower(owner) || '.' || lower(table_name) || ' is READ ONLY.' || chr(39) || '); '|| chr(10) || 'END;' || chr(10)|| '/' AS "Trigger to make table RO" FROM DBA_TABLES WHERE owner = 'SCOTT' -- change to correct user here /
Following is the example:
SQL> grant dba to testuser identified by test; Grant succeeded. SQL> connect testuser/test Connected. SQL> create table testtable (col int); Table created. SQL> SELECT 'CREATE OR REPLACE TRIGGER ' || lower(table_name) || 2 '_readonly ' || chr(10) || 'BEFORE DELETE OR INSERT OR UPDATE ON ' 3 || lower(owner) || '.' || lower(table_name) || chr(10) 4 || 'BEGIN' || chr(10) ||' RAISE_APPLICATION_ERROR(-20999,' 5 || chr(39) || 'Table : ' 6 || lower(owner) || '.' || lower(table_name) || ' is READ ONLY.' 7 || chr(39) || '); '|| chr(10) || 'END;' || chr(10)|| '/' 8 AS "Trigger to make table RO" 9 FROM DBA_TABLES 10 WHERE owner = 'TESTUSER' -- change to correct user here 11 / Trigger to make table RO -------------------------------------------------------------------------------- CREATE OR REPLACE TRIGGER testtable_readonly BEFORE DELETE OR INSERT OR UPDATE ON testuser.testtable BEGIN RAISE_APPLICATION_ERROR(-20999,'Table : testuser.testtable is READ ONLY.'); END; / SQL> -- Create trigger based on above result. SQL> CREATE OR REPLACE TRIGGER testtable_readonly BEFORE DELETE OR INSERT OR UPDATE ON testuser.testtable BEGIN RAISE_APPLICATION_ERROR(-20999,'Table : testuser.testtable is READ ONLY.'); END; / 2 3 4 5 6 Trigger created. SQL> insert into testtable values(1); insert into testtable values(1) * ERROR at line 1: ORA-20999: Table : testuser.testtable is READ ONLY. ORA-06512: at "TESTUSER.TESTTABLE_READONLY", line 2 ORA-04088: error during execution of trigger 'TESTUSER.TESTTABLE_READONLY'
No comments:
Post a Comment
Thanks for your comment.