Função para calcular a idade por uma data de nascimento
Meus amigos, como que faço uma função para calcular a idade pela data de nascimento? Preciso buscar pelo id.
Frederico Brigatte***
Curtidas 0
Respostas
Marisiana Battistella
21/05/2014
Olá Frederico!
Encontrei esse exemplo na web, mas não sei se funciona pois estou sem o Oracle aqui pra testar...
[url]http://allanfreitas.com.br/banco-de-dados/calcular-idade-pela-data-de-nascimento-no-oracle[/url]
Espero que funcione....
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....
GOSTEI 0
Frederico Brigatte***
21/05/2014
e como que posso fazer com parâmetro?
GOSTEI 0
Marisiana Battistella
21/05/2014
Digamos que você vá calcular, por exemplo, a idade de um cliente...
Pela lógica seria assim. Testa aí pra ver se funciona...
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...
GOSTEI 0
Frederico Brigatte***
21/05/2014
Como seria numa função?
GOSTEI 0
Deivison Melo
21/05/2014
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;
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;
GOSTEI 0
Deivison Melo
21/05/2014
Estou sem oracle aqui na máquina, então não testei...
Qualquer erro por favor me comunicar!!!
Qualquer erro por favor me comunicar!!!
GOSTEI 0
Frederico Brigatte***
21/05/2014
Como seria a chamada da função? Ela recebe um parâmetro?
GOSTEI 0
Marisiana Battistella
21/05/2014
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....
GOSTEI 0
Frederico Brigatte***
21/05/2014
E no exemplo do Deivison, como seria a chamada? Está recebendo parâmetro?
GOSTEI 0
Marisiana Battistella
21/05/2014
pData In Date
Indica que a function recebe uma data como parâmetro...
Indica que a function recebe uma data como parâmetro...
GOSTEI 0
Frederico Brigatte***
21/05/2014
E como que faço a chamada disso passando o parâmetro?
GOSTEI 0
Marisiana Battistella
21/05/2014
Tua function terá que ficar mais ou menos assim:
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.
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.
GOSTEI 0
Marisiana Battistella
21/05/2014
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]
[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]
GOSTEI 0
Frederico Brigatte***
21/05/2014
Da pra usar isso com php? Como que ficaria a chamada, é esse exemplo que quero saber. Me desculpe, não me expressei bem.
GOSTEI 0
Marisiana Battistella
21/05/2014
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...
$app é a variável que contém as configurações de conexão com o Oracle.
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.
GOSTEI 0
Frederico Brigatte***
21/05/2014
E como é a chamada da função no Oracle pelo php?
GOSTEI 0
Marisiana Battistella
21/05/2014
Você já criou a conexão com o BD do Oracle no PHP?
GOSTEI 0
Frederico Brigatte***
21/05/2014
Não, podia me ensinar como faz? Nunca mexi com oracle. E onde posso baixar free?
GOSTEI 0
Frederico Brigatte***
21/05/2014
Baixei esse oracle, OracleXE112_Win32.zip
É free? Tem algum tempo de utilização?
É free? Tem algum tempo de utilização?
GOSTEI 0
Deivison Melo
21/05/2014
Vc poderá usar a função da seguinte forma:
Função:
Usando no bloco anônimo oracle:
Modo simplificado de uso via query:
Caso for usar a função confeccionada pela Marisiana, modificar adicionando o exception:
PS. Ao usar oracle, principalmente se trabalhar em uma empresa que adote objetos de banco (procedures, functions, packages), comece a confeccionar os objetos com a utilização de cursores, pois se o retorno for nulo, não será
apresentado erros no seu código, só utilize select into se tiver certeza de que o retorno nunca será nulo, o select into é recomendado para uso de informações que sempre hajam retorno, por ser a forma mais rápida de recuperação de um registro.
Qualquer dúvida estou à disposição!
Emanoel Deivison
Recife - PE
Função:
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;
Usando no bloco anônimo oracle:
declare
DataInformada date;
DataRetornada date;
begin
DataRetornada:=RetornaIdade(DataInformada);
end;
Modo simplificado de uso via query:
select RetornaIdade(DataInformada)
from dual
Caso for usar a função confeccionada pela Marisiana, modificar adicionando o exception:
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);
exception
whe others then
v_idade:=null;
END;
PS. Ao usar oracle, principalmente se trabalhar em uma empresa que adote objetos de banco (procedures, functions, packages), comece a confeccionar os objetos com a utilização de cursores, pois se o retorno for nulo, não será
apresentado erros no seu código, só utilize select into se tiver certeza de que o retorno nunca será nulo, o select into é recomendado para uso de informações que sempre hajam retorno, por ser a forma mais rápida de recuperação de um registro.
Qualquer dúvida estou à disposição!
Emanoel Deivison
Recife - PE
GOSTEI 0
Frederico Brigatte***
21/05/2014
Pera ae que não to entendendo nada, rs. Como que uso isso com php, por exemplo?
GOSTEI 0
Gvdasa Sistemas
21/05/2014
No SQLSERVER:
Create Function Idade (@datanascimento datetime)
Returns Int
As
Begin
Declare @idade Int
set @idade = DATEDIFF(year, @datanascimento, getdate())
Return @idade
End
-- onde @datanascimento é a coluna da tabela, que contém a data de nascimento.
Create Function Idade (@datanascimento datetime)
Returns Int
As
Begin
Declare @idade Int
set @idade = DATEDIFF(year, @datanascimento, getdate())
Return @idade
End
-- onde @datanascimento é a coluna da tabela, que contém a data de nascimento.
GOSTEI 0