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_objectspara ver se a tabela existe em outro esquema. (Se você não tiver privilégios para consultar dba_objects,all_objectslista 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 asREGIONStabela emHRmas você está conectado comoSCOTT. Se você apenasselect * from regionsele procurará porSCOTT.REGIONS, que não existe. Para corrigir isso, siga um destes procedimentos:
-
usehr.regionsexplicitamente 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 aregionsredirecionado 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 éHRe 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 aregionsetc sem precisar especificar nenhum esquema e sem sinônimos.
-
-