Erro em procedure: V$DATABASE

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
thrrent
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Dom, 29 Jan 2012 5:28 pm
Localização: Rio de Janeiro

Não consigo fazer esse select dentro da procedure, o que pode ser? Exibe o seguinte erro:

Error: PL/SQL: ORA-00942: a tabela ou view não existe
Line: 26
Text: SELECT NAME INTO V_NOM_AMBIENTE FROM V$DATABASE;

Selecionar tudo

SELECT NAME INTO V_NOM_AMBIENTE FROM V$DATABASE;
Mas fora de procedure eu consigo realizar esse select e em script também, só na procedure que fica inválida.

Eu quero capturar o nome do ambiente em que a procedure está sendo executada no momento.

Segue parte do código:

Selecionar tudo

CREATE OR REPLACE PROCEDURE NOME_PROCEDURE
(p_ind_erro out varchar2,
 p_msg_retorno out varchar2) as

    V_ARQUIVO       SYS.UTL_FILE.FILE_TYPE;
    V_NOM_ARQUIVO   VARCHAR2(100);
    V_NOM_DIRETORIO VARCHAR2(100);
    V_LINHA         VARCHAR2(32767);
    V_NOM_AMBIENTE  V$DATABASE.NAME%TYPE; [b]AQUI QUE ACONTECE O ERRO[/b]

  /*--------------------PROCEDURE SEND_EMAIL APÓS O RELATÓRIO TER SIDO GERADO-----------------------*/
    PROCEDURE SEND_EMAIL(PI_ASSUNTO IN VARCHAR)
AS

 --VARIÁVEIS

BEGIN


     DBMS_APPLICATION_INFO.READ_CLIENT_INFO(V_CLIENT_INFO_RETORNO);
     V_CLIENT_INFO_POSICAO      := INSTR(V_CLIENT_INFO_RETORNO, '@');
     V_CLIENT_INFO_TAMANHO      := LENGTH(V_CLIENT_INFO_RETORNO);
     V_CLIENT_INFO_USUARIO      := SUBSTR(V_CLIENT_INFO_RETORNO,1,(V_CLIENT_INFO_POSICAO - 1));
     V_CLIENT_INFO_IP           := SUBSTR(V_CLIENT_INFO_RETORNO,(V_CLIENT_INFO_POSICAO + 1), V_CLIENT_INFO_TAMANHO);
     IF V_CLIENT_INFO_USUARIO IS NULL THEN
        V_CLIENT_INFO_USUARIO := USER;
     END IF;


     vê_SUBJECT := 'COPIA DE ARQUIVO DE '||V_NOM_AMBIENTE;
     vê_BODY    := 'Favor copiar o arquivo '|| V_NOM_ARQUIVO || ' do diretório '|| V_NOM_DIRETORIO ||' Para o...... 


END SEND_EMAIL;

  BEGIN

    SELECT NAME INTO V_NOM_AMBIENTE FROM V$DATABASE; [b]AQUI QUE ACONTECE O ERRO[/b]


ETC..

END;
 
leandromiranda87
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Ter, 20 Mar 2012 11:37 am
Localização: Campinas
Leandro L. Miranda

Irmão,

Verifica os GRANTs que o dono da procedure possui em relação a view citada.

Veja se ele tem liberdade de leitura para fazer esse processo.

Pela descrição me parece isso.

Abraço.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Esse erro pode ser duas coisas:
1-Permissão.
2-Referência correta ao objeto.

Em resumo, basta o usuário executor enxergar a tabela do proprietário correto e ter permissão de executar a ação.
Para ver, precisa referenciar o owner do objeto(onwer.tabela) ou então possuir um sinônimo(synonym) de um usuário para outro para aquele objeto.
Caso não tenha permissão, precisará dos GRANTs da vida.
thrrent
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Dom, 29 Jan 2012 5:28 pm
Localização: Rio de Janeiro

Obrigado, é grant mesmo!
Responder
  • Informação
  • Quem está online

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