Pular para o conteúdo

Fóruns Banco de dados Oracle Lockar Linha, tem como?? Lockar Linha, tem como??

#94821
fsitja
Participante

    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.