Anonim

Ocasionalmente, você vê um erro ora-00942 ao executar uma instrução SQL. Ele tem algumas causas e, como sempre, a sintaxe do erro não é a mais descritiva. Se você está enfrentando isso e quer saber como corrigir o erro ora-00942, continue a ler.

Até onde eu sei, existem três causas principais do erro ora-00942:

  1. Privilégios de usuário insuficientes
  2. A tabela ou exibição não existe realmente
  3. A tabela ou visualização está em um esquema diferente

Eu vou te mostrar como lidar com cada um.

Corrija o erro ora-00942

Primeiro, um pequeno aviso. Não sou DBA, sou administrador do Windows e técnico em hardware de desktop e servidor. Eu sei como executar o SQL, mas não com nenhum grau de especialização e certamente não no nível que pode solucionar problemas. Eu tive que pedir ajuda a um amigo meu do Oracle DBA, por isso, enquanto escrevi essa peça, as partes inteligentes são todas dele.

Esta lista de três causas do erro ora-00942 não é completa. Aparentemente, existem outras causas aleatórias, mas essas três são aparentemente as mais comuns.

Privilégios de usuário insuficientes

Uma das principais causas do erro ora-00942 é que o usuário não possui privilégios suficientes para acessar a tabela em questão. Você pode verificar isso executando duas consultas.

- liste os privilégios do sistema para o usuário ou função SELECT * FROM dba_sys_privs WHERE donatário IN (& user_role, 'PUBLIC');

- lista privilégios de objeto para o usuário ou função

SELECT donatário, proprietário || '.' || table_name objeto, privilégio, concedido FROM dba_tab_privs WHERE donatário IN (& user_role) ORDER BY donatário, proprietário || '.' || table_name, privilégio;

Esses dois dirão se o usuário em questão tem os privilégios corretos para executar o comando. Se o usuário tiver os privilégios corretos, passe para a próxima. Se o usuário não tiver os privilégios corretos, conceda-os ou peça ao administrador do banco de dados que o faça.

O erro ora-00942 também pode ocorrer se o usuário do esquema que você está usando tiver privilégios INSERT, mas não privilégios SELECT. Novamente, verifique o nível de privilégio e adicione SELECT à lista ou peça a um administrador de banco de dados para fazer isso. Aparentemente, o privilégio SELECT específico deve ser concedido a cada esquema, caso contrário, você ainda verá o erro ora-00942.

A tabela ou exibição não existe realmente

Essa causa do erro ora-00942 pode ser causada por sintaxe de consulta incorreta ou se a tabela não existir. Embora esse pareça o primeiro lugar lógico para começar, tenho certeza de que o privilégio do usuário é a causa número um do erro. A tabela não está lá ou a sintaxe incorreta da tabela está sendo usada é a segunda.

Para verificar se a tabela existe, verifique primeiro a sintaxe da consulta. Se a sintaxe estiver correta, execute esta consulta.

SELECT owner, object_name, object_type FROM all_objects WHERE object_type IN ('TABLE', 'VIEW') AND object_name = 'YOUR_TABLE_NAME';

Na última linha, insira o nome da tabela real onde você vê 'YOUR_TABLE_NAME'. Isso deve indicar se a tabela que você está tentando consultar existe ou não. Se ele retornar sem tabela, a tabela que você está consultando não existe no esquema ou no banco de dados.

Se o sistema que você está usando tiver um menu Tabelas, você pode verificar manualmente a tabela, se preferir, mas a consulta acima realiza o trabalho.

A tabela ou visualização está em um esquema diferente

Se o usuário tiver privilégios e a tabela existir e você ainda estiver vendo o erro ora-00942, é provável que isso ocorra no esquema. Se você estiver gerenciando vários esquemas, é fácil executar uma consulta em um esquema que não é seu. Quando você está ocupado e contra, é um erro simples de cometer.

Verifique o esquema manualmente se é possível ou adicione o nome do esquema na linha FROM da sua consulta. Se você não tiver os privilégios corretos para o novo esquema, verá o erro ora-00942 mais uma vez. Retorne à primeira correção de privilégio do usuário e verifique o esquema correspondente ou peça ao seu DBA para fazer isso por você.

Como mencionado acima, consultei um amigo meu do Oracle DBA para esta peça, para que todos lhe sejam creditados pelo trabalho duro. Se você encontrar algum erro ou omissão aqui, eles são apenas meus. Deixe-me saber na seção de comentários se eu perdi alguma coisa ou entendi errado e eu a corrigirei.

Se você souber de outra maneira de corrigir o erro ora-00942, conte-nos abaixo!

Como corrigir o erro ora-00942