O primeiro passo para diagnosticar um problema ao criar uma visualização é tentar o
select
parte por conta própria. Nesse caso, você ainda receberia o erro ORA-00942, mas o problema agora é apenas uma questão de consulta e acesso e não tem a ver especificamente com a visualização. Quando você obtém ORA-00942:tabela ou visualização não existe , é porque:
-
O nome da tabela ou visualização que você digitou realmente não existe.
-
Verifique a ortografia - talvez haja um erro de digitação.
-
Você está conectado a um banco de dados onde ele existe? Talvez você esteja em um sistema de teste que não o tenha.
-
Consultadba_objects
para ver se a tabela existe em outro esquema. (Se você não tiver privilégios para consultar dba_objects,all_objects
lista tudo o que você tem permissão para ver, o que pode ser de alguma ajuda.)
-
-
Ele realmente existe, mas está em outro esquema.
Nesse caso, há dois problemas possíveis:
-
Você não tem permissão para consultá-lo. O proprietário da tabela precisagrant read on xyz
(substitua o nome real da tabela porxyz
) para qualquer
-
vocês
-
public
(se você quiser que todos possam ver os dados, nem sempre é aconselhável)
-
uma função que você tem (mas as funções não são usadas por PL/SQL armazenado ou visualizações , no entanto, é possível que você possa consultar uma tabela em outro esquema graças a uma função que você possui, mas ainda não conseguir criar uma exibição ou um procedimento que a use.)
-
-
Você precisa especificar o esquema. Digamos que você queira consultar asREGIONS
tabela emHR
mas você está conectado comoSCOTT
. Se você apenasselect * from regions
ele procurará porSCOTT.REGIONS
, que não existe. Para corrigir isso, siga um destes procedimentos:
-
usehr.regions
explicitamente em sua consulta.
-
em seu esquema,create or replace synonym regions for hr.regions;
Agora, sempre que você se referir aregions
, o banco de dados redirecionará automaticamente parahr.regions
.
-
em qualquer esquema com permissão para criar sinônimos públicos:create or replace public synonym regions for hr.regions;
Agora todos que se conectarem ao banco de dados terão referências aregions
redirecionado parahr.regions
, o que nem sempre é uma boa ideia, mas é uma opção de qualquer maneira.
-
alter session set current_schema = hr;
Agora o esquema padrão para resolver nomes de objetos éHR
e não aquele em que você se conectou. Para aplicativos que sempre fazem login como um usuário diferente daquele que possui as tabelas, você pode criar um após o acionador de logon então isso é sempre definido. Em seguida, eles podem apenas se referir aregions
etc sem precisar especificar nenhum esquema e sem sinônimos.
-
-