GARANTIR DESCONTO

Fórum Função para calcular a idade por uma data de nascimento #479731

21/05/2014

0

Meus amigos, como que faço uma função para calcular a idade pela data de nascimento? Preciso buscar pelo id.
Frederico Brigatte***

Frederico Brigatte***

Responder

Posts

21/05/2014

Marisiana Battistella

Olá Frederico!
Encontrei esse exemplo na web, mas não sei se funciona pois estou sem o Oracle aqui pra testar...
SELECT
trunc((months_between(sysdate, to_date('25/01/1987','dd/mm/yyyy')))/12) AS idade
FROM DUAL

[url]http://allanfreitas.com.br/banco-de-dados/calcular-idade-pela-data-de-nascimento-no-oracle[/url]

Espero que funcione....
Responder

Gostei + 0

21/05/2014

Frederico Brigatte***

e como que posso fazer com parâmetro?
Responder

Gostei + 0

21/05/2014

Marisiana Battistella

Digamos que você vá calcular, por exemplo, a idade de um cliente...
SELECT trunc((months_between(sysdate, to_date(c.dt_nascimento,'dd/mm/yyyy')))/12) AS idade
FROM cliente c
WHERE c.cod_cliente = v_codigo

Pela lógica seria assim. Testa aí pra ver se funciona...
Responder

Gostei + 0

21/05/2014

Frederico Brigatte***

Como seria numa função?
Responder

Gostei + 0

22/05/2014

Deivison Melo

Simples assim:

create or replace function RetornaIdade(pData In Date) return number is
cursor cData(pData in Date) is
SELECT trunc((months_between(sysdate, pData))/12) idade
FROM DUAL;
vcData cData%rowtype;
begin
open cData(pData);
fetch cData into vcData;
close cData;

return vcData.idade;
end;
Responder

Gostei + 0

22/05/2014

Deivison Melo

Estou sem oracle aqui na máquina, então não testei...

Qualquer erro por favor me comunicar!!!
Responder

Gostei + 0

22/05/2014

Frederico Brigatte***

Como seria a chamada da função? Ela recebe um parâmetro?
Responder

Gostei + 0

22/05/2014

Marisiana Battistella

Se você precisa que a data seja calculada buscando pelo ID, a tua function vai ter que receber esse ID por parâmetro, executar o select que t passei no segundo exemplo e retornar a idade que foi calculada....
Responder

Gostei + 0

22/05/2014

Frederico Brigatte***

E no exemplo do Deivison, como seria a chamada? Está recebendo parâmetro?
Responder

Gostei + 0

22/05/2014

Marisiana Battistella

pData In Date

Indica que a function recebe uma data como parâmetro...
Responder

Gostei + 0

22/05/2014

Frederico Brigatte***

E como que faço a chamada disso passando o parâmetro?
Responder

Gostei + 0

22/05/2014

Marisiana Battistella

Tua function terá que ficar mais ou menos assim:

CREATE FUNCTION calcula_idadel(in_codigo IN NUMBER) 
   RETURN NUMBER 
   IS 
        v_idade NUMBER(11);
   BEGIN 
       
        SELECT trunc((months_between(sysdate, to_date(c.dt_nascimento,'dd/mm/yyyy')))/12) 
        INTO v_idade
        FROM cliente c
        WHERE c.cod_cliente = in_codigo;
        RETURN(v_idade); 

    END;


Ela recebe o código como parâmetro e retorna a idade calculada a partir da data de nascimento que está cadastrada...
Eu não cheguei a testar se funciona porque não tenho o Oracle aqui no meu PC, peguei exemplos na web e construi a função.
Mas logicamente seria assim, você apenas precisa adaptar ela a realidade que vc está trabalhando.
Responder

Gostei + 0

22/05/2014

Marisiana Battistella

Se você quiser entender um pouco mais sobre parâmetros em functions e procedures, neste link tem uma explicação:
[url]http://plsql-tutorial.com/plsql-passing-parameters-procedure-function.htm[/url]
E neste outro link tem uma explicação de como é a estrutura de uma function: [url]http://plsql-tutorial.com/plsql-functions.htm[/url]
Responder

Gostei + 0

22/05/2014

Frederico Brigatte***

Da pra usar isso com php? Como que ficaria a chamada, é esse exemplo que quero saber. Me desculpe, não me expressei bem.
Responder

Gostei + 0

22/05/2014

Marisiana Battistella

Sim dá pra usar no PHP...
Você vai ter que criar essa função no Oracle e chamá-la no PHP passando o código como parâmetro
Um exemplo que já utilizei...
function funCalculaIdade($app, $codigo){
	$r = db($app, "F", "nome_schema.fun_calculaidade", $codigo);
	return $r;
}


$app é a variável que contém as configurações de conexão com o Oracle.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar