ORA-00942: table or view does not exist

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
hcamposcruz
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Sex, 17 Dez 2010 7:35 am
Localização: Belo Horizonte
Hudson Cruz

Pessoal bom dia.

Estou montando uma procedure e está aparecendo o erro

Selecionar tudo

ORA-00942: table or view does not exist
.

O erro é nas linhas onde realiza o insert

Selecionar tudo

INSERT INTO TB_AJUSTA_PARAMETRO   VALUE ( SELECT * FROM V$PARAMETER );
  INSERT INTO TB_AJUSTA_INSTANCIA   VALUE ( SELECT * FROM V$INSTANCE );
  INSERT INTO TB_AJUSTA_HIST_ACTIVE VALUE ( SELECT * FROM DBA_HIST_ACTIVE_SESS_HISTORY ); .
Agora se eu executar qualquer um dos insert fora da procedure, irá funcionar perfeitamente.
Se alguém puder me ajudar ficarei muito agradecido.

Selecionar tudo

create or replace
PROCEDURE SP_AJUSTA_PARAMETROS (P_RETORNO VARCHAR2) IS

  V_HOUR          VARCHAR2(10);
  V_STATE         VARCHAR2(10);
  V_COUNT         VARCHAR2(100);

BEGIN
  
  INSERT INTO TB_AJUSTA_PARAMETRO   VALUE ( SELECT * FROM V$PARAMETER );
  INSERT INTO TB_AJUSTA_INSTANCIA   VALUE ( SELECT * FROM V$INSTANCE );
  INSERT INTO TB_AJUSTA_HIST_ACTIVE VALUE ( SELECT * FROM DBA_HIST_ACTIVE_SESS_HISTORY );
  
  FOR R_HIST IN (
      SELECT TO_CHAR(TRUNC((SAMPLE_TIME), 'HH'), 'HH24:MI') AS "HOUR",
             STATE,
             COUNT(*)/360   AS "COUNT"
        FROM (
                SELECT SAMPLE_TIME,
                       SAMPLE_ID,
                       CASE WHEN SESSION_STATE = 'ON CPU'  THEN 'CPU'
                            WHEN SESSION_STATE = 'WAITING' AND WAIT_CLASS IN('User I/O') THEN 'IO'
                            WHEN SESSION_STATE = 'WAITING'   AND WAIT_CLASS IN('Cluster')  THEN 'CLUSTER'
                            ELSE 'WAIT'
                       END STATE
                  FROM TB_AJUSTA_HIST_ACTIVE
                 WHERE SESSION_TYPE IN('FOREGROUND')
                   AND SAMPLE_TIME BETWEEN TRUNC(SYSDATE, 'HH') -25/24 
                   AND TRUNC(SYSDATE, 'HH') -1/24
             )
       GROUP BY TRUNC((SAMPLE_TIME), 'HH'), STATE
       ORDER BY TRUNC((SAMPLE_TIME), 'HH')  
  )
  LOOP
    
    V_HOUR          := R_HIST."HOUR";
    V_STATE         := R_HIST.STATE;
    V_COUNT         := R_HIST."COUNT";

  END LOOP;
  
  
  COMMIT;

EXCEPTION 
  WHEN OTHERS THEN
    
    NULL;
  
END;
.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você diz q ao realizar os inserts funciona..
nesse momento você esta logado com qual usuario?

você diz que ao tentar compilar a proc ou executar da o erro..
qual usuário é o dono da proc?


possivelmente são usuários distintos e o owner da proc não tem permissão em alguma tabela ou falta o sinonimo para que tenha acesso sem colocar o esquema na frente do objeto
hcamposcruz
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Sex, 17 Dez 2010 7:35 am
Localização: Belo Horizonte
Hudson Cruz

O usuário que estou usando foi criado para o nosso sistema acessar o banco.
Eu não sou o DBA, e como você mencionou provavelmente não tenho certos privilégios. Agora teria alguma forma de eu criar uma rotina que executasse esses inserts em algum determinado momento?
Obrigado pela atenção!
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

acho estranho você conseguir executar os inserts por fora da proc estando com um usuario logado e com esse mesmo usuario você executar a proc e dar erro

se você não tiver permissão realmente.. so com ajuda do DBA
hcamposcruz
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Sex, 17 Dez 2010 7:35 am
Localização: Belo Horizonte
Hudson Cruz

Entendo. Agora você tem alguma idéia que eu possa fazer para pegar o erro que acontece e salvar em uma outra tabela?

A rotina roda todas as madrugadas, um ou duas vezes no mês acontece algum problema, preciso fazer uma procedure para dispará-la assim que acontecer o erro na rotina.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

O erro esta acontecendo ou por que você não tem privilegios ou por que não existe sinônimo pra tabela

Não tem nenhum erro para pegar e jogar em tabela, é exatamente isso .

Tu tuem que garantir que o usuário owner da procedure possua estes privilégios, e que exista um sinonimo publico pra tabela caso o owner da mesma não seja o mesmo da procedure.
hcamposcruz
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Sex, 17 Dez 2010 7:35 am
Localização: Belo Horizonte
Hudson Cruz

ok. Vou tentar aqui e ver o que eu consigo.
Obrigado
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 28 visitantes