Permitir acesso a Função criada em PL/SQL

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
lrmaross
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 14 Dez 2005 10:56 am
Localização: PIRACICABA - SP

Amigos,

Criei uma função para realizar a conversão de Data Juliana para data normal.
A função atende plenamente meus objetivos, porém, apenas eu consigo utiliza-la - existem outros analistas que desejariam ter acesso a mesma, mas quando fazem referencia em uma instrução SQL, o Oracle retorna a mensagem de Identificador Inválido.
O que deve ser feito para que outros usuários possuam acesso a mesma?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você tem que dar permissão para os outros usuários poderem acessar sua function.

Entre no usuário que você criou sua função e rode o seguinte comando:

Selecionar tudo

grant execute on fnc_sua_funcao to public;
Caso você quer dar o privilégio pra apenas uma pessoa, faça assim:

Selecionar tudo

grant execute on fnc_sua_funcao to joao;
Seria isso?
lrmaross
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 14 Dez 2005 10:56 am
Localização: PIRACICABA - SP

Dr_gori, boa tarde.

Realmente o que eu necessito é dar um GRANT em minha função.
Já havia realizado este teste e a resposta que tenho quando entro em outra sessão (outro usuário) é:

ORA-00904: "TO_JULIANA": invalid identifier

para que você consiga visualizar melhor o que está ocorrendo, segue a função que eu estou utilizando:

Selecionar tudo

CREATE OR REPLACE Function to_juliana (dt_a_converter DATE )
RETURN NUMBER IS
dt_juliana NUMBER;

BEGIN
/* Inicio do Calculo de conversão para Data Juliana */

dt_juliana := 0;
dt_juliana := To_Char( TO_DATE( dt_a_converter )  , 'YYYYDDD') - 1900000 ;

/* atribuímos o retorno da função */
RETURN( dt_juliana );
END To_Juliana;
/

GRANT EXECUTE ON to_juliana TO PUBLIC;
Estou utilizando como interpretador SQL o SQLTools e estou utilizando dois Schemas (usuários) com as mesmas permissões no banco de dados - em um eu realizo a criação e a função funciona corretamente e no outro encontro problemas para utilizar a função.

O que pode estar ocorrendo?
lodvini
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 16 Jun 2005 7:59 am
Localização: Sapiranga - RS

Ola...

Provavelmente você deve adicionar o nome do seu usuario antes do nome da sua function quando estiver em outro usuario e for chamar essa function.

Ex.:

Selecionar tudo

SQL> Con Vinicius
Connected as Vinicius

SQL> Select Irmaross.To_Juliana(Sysdate) From Dual;
Espero funcionar :P
mportes
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Ter, 01 Nov 2005 11:53 pm
Localização: São Paulo
Contato:

lrmaross, perdão por entrar na discussão, mas você quer converter data normal para julian não? Por que você escreveu uma função se a to_char já faz isso? Com a vantagem de não haver switch de contexto entre sql e plsql que poderia gerar inúmeros sql recursivos dependendo do número de registros que a função iria ler.

Outra coisa, sua função não me parece devolver corretamente o valor juliano de uma data, veja:

Selecionar tudo

ops$marcio@LNX10GR2> CREATE OR REPLACE Function to_juliana (dt_a_converter DATE )
  2  RETURN NUMBER IS
  3  dt_juliana NUMBER;
  4
  5  BEGIN
  6  /* Inicio do Calculo de conversão para Data Juliana */
  7
  8  dt_juliana := 0;
  9  dt_juliana := To_Char( TO_DATE( dt_a_converter )  , 'YYYYDDD') - 1900000 ;
 10
 11  /* atribuímos o retorno da função */
 12  RETURN( dt_juliana );
 13  END To_Juliana;
 14  /

Function created.

ops$marcio@LNX10GR2> select to_juliana(trunc(sysdate)) from dual;

TO_JULIANA(TRUNC(SYSDATE))
--------------------------
                    105350

1 row selected.

ops$marcio@LNX10GR2> select to_date( 105350, 'j') from dual;

TO_DATE(105350,'J')
-------------------
07/06/4424 00:00:00

1 row selected.

Agora com o to_char

ops$marcio@LNX10GR2> select to_char(trunc(sysdate), 'j') from dual;

TO_CHAR
-------
2453721

1 row selected.

ops$marcio@LNX10GR2> select to_date( 2453721, 'j' ) from dual;

TO_DATE(2453721,'J'
-------------------
16/12/2005 00:00:00

1 row selected.

E aqui parte do manual que explica:
Using Julian Dates

A Julian date is the number of days since January 1, 4712 bc. Julian dates allow continuous dating from a common reference. You can use the date format model "J" with date functions TO_DATE and TO_CHAR to convert between Oracle DATE values and their Julian equivalents.
Example

This statement returns the Julian equivalent of January 1, 1997:

Selecionar tudo

SELECT TO_CHAR(TO_DATE('01-01-1997', 'MM-DD-YYYY'),'J')
    FROM DUAL;

TO_CHAR
--------
2450450
http://download-west.oracle.com/docs/cd ... .htm#47829
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Provavelmente você deve adicionar o nome do seu usuario antes do nome da sua function quando estiver em outro usuario e for chamar essa function.
Só pra complementar:

Se você não quiser colocar o OWNER antes de chamar a função, você pode torná-la pública criando um sinônimo publico !!!

Selecionar tudo

CREATE PUBLIC SYNONYM sua_function FOR sua_function;
Responder
  • Informação
  • Quem está online

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