Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;>
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?
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.
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.
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.
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 d number := trunc(n);
h number;
m number;
s number; 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 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.
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)