Oracle için bir tabloyu sadece okunabilir(readonly) yapmak için constraint kullanılabilinir.Bunun için constraint disable validate olarak oluşturulmalıdır.Örnek ile daha iyi anlaşılacaktır:
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as dev
SQL> create table const_sample( x number );
Table created
SQL>
SQL> begin
2 INSERT INTO const_sample(x) VALUES(1);
3 INSERT INTO const_sample(x) VALUES(2);
4 INSERT INTO const_sample(x) VALUES(3);
5 INSERT INTO const_sample(x) VALUES(4);
6 INSERT INTO const_sample(x) VALUES(5);
7 end;
8 /
PL/SQL procedure successfully completed
SQL> commit;
Commit complete
SQL> alter table const_sample add constraint cons_number check( x > 0 ) disable validate;
Table altered
SQL> INSERT INTO const_sample(x) VALUES(50);
INSERT INTO const_sample(x) VALUES(50)
ORA-25128: No insert/update/delete on table with constraint (DEV.CONS_NUMBER) disabled and validated
Connected as dev
SQL> create table const_sample( x number );
Table created
SQL>
SQL> begin
2 INSERT INTO const_sample(x) VALUES(1);
3 INSERT INTO const_sample(x) VALUES(2);
4 INSERT INTO const_sample(x) VALUES(3);
5 INSERT INTO const_sample(x) VALUES(4);
6 INSERT INTO const_sample(x) VALUES(5);
7 end;
8 /
PL/SQL procedure successfully completed
SQL> commit;
Commit complete
SQL> alter table const_sample add constraint cons_number check( x > 0 ) disable validate;
Table altered
SQL> INSERT INTO const_sample(x) VALUES(50);
INSERT INTO const_sample(x) VALUES(50)
ORA-25128: No insert/update/delete on table with constraint (DEV.CONS_NUMBER) disabled and validated
Görüldüğü üzere tablo üzerinde DML işlemi yapmaya izin verilmemektedir.
Bundan başka bir yöntem olarak da o tablo üzerinde INSERT, UPDATE ve DELETE işlemlerininden önce tetiklenecek bir trigger yazmaktır. Trigger içinde exception oluşturursak, kullanıcıların bu tablo üzerinde işlem yapmalarını engelleyebiliriz.