› Fóruns › Banco de dados Oracle › Lockar Linha, tem como?? › Lockar Linha, tem como??
Tudo bem, mas eu continuo sem entender: Qual a restrição que impede de criar uma view?
Na view teria “WHERE ID NOT IN (3, 7, 23, 78 ) with check option”, como o Burga sugeriu. Deixa eu te dar um exemplo em código, pra você ver se atende.
SQL> create table tab_original (id number(10), descricao varchar2(100));
Table created
SQL> insert into tab_original values (1, 'A');
1 row inserted
SQL> insert into tab_original values (2, 'A');
1 row inserted
SQL> insert into tab_original values (3, 'A');
1 row inserted
SQL> insert into tab_original values (4, 'A');
1 row inserted
SQL> insert into tab_original values (7, 'A');
1 row inserted
SQL> insert into tab_original values (23, 'A');
1 row inserted
SQL> insert into tab_original values (78, 'A');
1 row inserted
SQL> insert into tab_original values (100, 'A');
1 row inserted
SQL> select * from tab_original;
ID DESCRICAO
1 A
2 A
3 A
4 A
7 A
23 A
78 A
100 A
8 rows selected
SQL> create or replace view vw_tab_original as
2 select t.id, t.descricao
3 from tab_original t
4 where t.id not in (3, 7, 23, 78) with check option;
View created
SQL> select * from vw_tab_original;
ID DESCRICAO
1 A
2 A
4 A
100 A
Aí você tem duas opções
- ou renomeia a tabela para algum outro nome e cria a view com o nome “tab_original”, no exemplo;
- ou, se for outro usuário quem usa a tabela, remova o grant dela (revoke select, insert, update, delete on tab_original from outro_user) e dê os grants na view, criando um sinônimo privado nesse outro owner com o nome “tab_original”.
De qualquer uma das duas formas acima, o usuário não vai nem perceber que a tabela que ele usava agora foi substituída por uma view. Quando quiser “destravar” elas, é só executar novamente o create or replace view, só removendo o where. O usuário utilizando a view vai apenas perceber que as novas linhas apareceram.