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
  

Mensagemem Qua, 14 Dez 2005 11:02 am

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?
lrmaross
Localização: PIRACICABA - SP

Mensagemem Qua, 14 Dez 2005 11:53 am

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:
Código: Selecionar todos
grant execute on fnc_sua_funcao to public;


Caso você quer dar o privilégio pra apenas uma pessoa, faça assim:
Código: Selecionar todos
grant execute on fnc_sua_funcao to joao;


Seria isso?
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Qua, 14 Dez 2005 1:11 pm

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:

Código: Selecionar todos
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?
lrmaross
Localização: PIRACICABA - SP

Mensagemem Qui, 15 Dez 2005 11:05 am

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.:
Código: Selecionar todos
SQL> Con Vinicius
Connected as Vinicius

SQL> Select Irmaross.To_Juliana(Sysdate) From Dual;


Espero funcionar :P
lodvini
Localização: Sapiranga - RS

Mensagemem Sex, 16 Dez 2005 6:43 pm

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:
Código: Selecionar todos
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:

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

TO_CHAR
--------
2450450

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/sql_elements2a.htm#47829
mportes
Localização: São Paulo


Mensagemem Sáb, 17 Dez 2005 12:16 am

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 !!!
Código: Selecionar todos
CREATE PUBLIC SYNONYM sua_function FOR sua_function;
dr_gori
Localização: Portland, OR USA

Thomas F. G

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


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem