Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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;

Compartilhar este post


Link para o post
Compartilhar em outros 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)

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.