Jump to content

Archived

This topic is now archived and is closed to further replies.

Samuel Mattos

[Resolvido] Erro na hora de criar função pls-00201

Recommended Posts

Bom dia,

estou aqui mais uma vez com uma duvida, estou tetnando criar uma função que me retorne a data formatada de uma váriavel do tipo interval, so que quando eu tento criar a função ele me retorna o seguinte erro.

Erro(2,26): PLS-00201: o identificador 'INTERVAL' deve ser declarado

 

A função que eu estou tentando criar é está.

 

create or replace
FUNCTION intertochar(dat interval)
   RETURN VARCHAR2
 IS
   reg_gap VARCHAR2(200);
 BEGIN
   reg_gap := TO_CHAR(extract(HOUR FROM dat), 'fm00') ||' : '|| 
              TO_CHAR(extract(MINUTE FROM dat), 'fm00') ||' : '|| 
              TO_CHAR(extract(SECOND FROM dat), 'fm00');
   RETURN reg_gap;
 END;

Share this post


Link to post
Share on other sites

create or replace
FUNCTION intertochar(dat interval)

 

Deveria ser, creio :

 

create or replace
FUNCTION intertochar(dat in date)

 

ou

 

 

create or replace
FUNCTION intertochar(dat in timestamp)

Share this post


Link to post
Share on other sites

create or replace
FUNCTION intertochar(dat interval)

 

Deveria ser, creio :

 

create or replace
FUNCTION intertochar(dat in date)

 

ou

 

 

create or replace
FUNCTION intertochar(dat in timestamp)

 

Cara eu consegui com o timestamp mas infelizmente eu consigo somente passar como parametro interval, ja tentei utilizar o IN tambem mas não funciona ,por default o oracle ja me coloca o IN. O meu interval está no seguinte formato "+000000000 00:01:56.000000000" não consigo colocar ele para um timestamp. Tem mais alguma sugestão?

Share this post


Link to post
Share on other sites

O interval no caso seria um CHAR ou VARCHAR2.

 

Não teria o Extract neste caso, teria de dar substr na posição para achar o mês ou ano?

 

Por que não usam DATE ? É muito mais simples que o TIMESTAMP, este tem usos muito específicos.

Share this post


Link to post
Share on other sites

Utilizamos TIMESTAMP por termos muitos relatórios que trazem informações a respeito dos horários de cada atedente sem contar os relatórios graficos de tempo médio e máximo, no postgres sabia mexer com o timestamp legal no oracle ainda sou iniciante mas concerteza vou me aprimorar, vou verificar se consigo criar ela somente com o varchar o char e qualquer coisa eu posto aqui.

Valeu pela ajuda.

Share this post


Link to post
Share on other sites

O DATE tem data e hora até segundos, raramente se precisa de maior precisão.

Além disto é mais simples de se trabalhar.

 

TIMESTAMP até milionésimos de segundos,além da zona de tempo (local da hora), complexidade que poucas aplicações precisam.

Share this post


Link to post
Share on other sites

Boa tarde pessoal,

desculpe a demora para responder este tópico consegui resolver o meu problema com esse link.

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10729709873260

tive que criar duas funções ai vão elas.

 

create or replace
function from_days( n number )
 return varchar2
is
 d number := trunc(n);
 h number;
 m number;
 s number;
begin
 h := abs((n-d)*24);
 m := (h-trunc(h))*60;
 s := (m-trunc(m))*60;
 return 
        to_char(trunc(h),'FM09') || ':' ||
        to_char(trunc(m),'FM09') || ':' ||
        to_char(s,'FM09');
end;

 

e

 

create or replace
function from_seconds( n number )
 return varchar2
is
begin
 return from_days( n/24/60/60 );
end;

 

Onde ao inves de passar um interval como eu estava querendo passei o number e funcionou muito bem obrigado por tudo.

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.