SQL - procedimientos almacenados

   
Vista:

procedimientos almacenados

Publicado por Eliseo (3 intervenciones) el 17/10/2011 04:47:23
cuál es mi error de sintaxis en el siguiente código:

delimiter //
create procedure ai_tiempo (Fech_Def date)
begin
select nombre, datediff(yy, Fech_Def, Now()) from fallecido;
end
//
delimiter ;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

procedimientos almacenados

Publicado por leonardo_josue (877 intervenciones) el 17/10/2011 16:33:43
Hola Eliseo:

No pones en tu mensaje qué BD estás utilizando, pero puedo suponer que se trata de MySQL. Siempre que publiques una pregunta es importante que especifiques el mayor número de detalles, así si por ejemplo la consulta te marque un error (como error de sintaxis en este caso) publiques el TEXTO COMPLETO DEL ERROR, ya que este proporciona información adicional que nos puede ayudar a comprender dónde está el fallo, ojo para la próxima.

Ahora bien, volviendo al problema. La función de MySQL DATEDIFF SÓLO RECIBE DOS PARÁMETROS. Si checas en el manual la sintaxis de la función puedes observar lo siguiente:

http://dev.mysql.com/doc/refman/5.0/es/date-and-time-functions.html

1
2
3
4
5
6
7
8
9
10
DATEDIFF(expr,expr2)
 
DATEDIFF() retorna el número de días entre la fecha inicial expr y la fecha final
expr2. expr y expr2 son expresiones de fecha o de fecha y hora. Sólo las partes
de fecha de los valores se usan en los cálculos.
 
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
        -> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
        -> -31


No sé bien qué es lo que estás tratando de obtener, pero creo que sería el tiempo que tiene de fallecido alguna persona, correcto??? esto lo podrías hacer utilizando la función TIMESTAMPDIFF, checa el manual para ver cómo funciona y aquí te dejo un ejemplo ya funcionando.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mysql> CREATE TABLE fallecido (id INT, fech_def DATE);
Query OK, 0 rows affected (0.08 sec)
 
mysql> INSERT INTO fallecido VALUES (1, '2009-10-17'), (2, '2010-10-17'),
    -> (3, '2010-10-18');
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM fallecido;
+------+------------+
| id   | fech_def   |
+------+------------+
|    1 | 2009-10-17 |
|    2 | 2010-10-17 |
|    3 | 2010-10-18 |
+------+------------+
3 rows in set (0.00 sec)
 
mysql> SELECT id, TIMESTAMPDIFF(YEAR,fech_def, CURDATE()) FROM fallecido;
+------+-------------------------------------+
| id   | TIMESTAMPDIFF(YEAR,fech_def, NOW()) |
+------+-------------------------------------+
|    1 |                                   2 |
|    2 |                                   1 |
|    3 |                                   0 |
+------+-------------------------------------+
3 rows in set (0.00 sec)


Espero que con esto puedas echar a andar tu procedimiento.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

procedimientos almacenados

Publicado por Eliseo (3 intervenciones) el 19/10/2011 04:17:02
gracias leo;

mi problema es el siguiente: De la base de datos de un cementerio necesito, a través de de una función saber cuentos años de fallecido lleva la persona. para ello se usa la tabla fallecido, la cual contiene una clave, un nombre, fecha de defunción.
estoy usando mysql como mi manejador de bd.

me podrian ayudar!!!!!!!!

ya la intente crear pero me marca error de sintaxis.

gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

procedimientos almacenados

Publicado por leonardo_josue (877 intervenciones) el 19/10/2011 16:05:35
Hola de nuevo Eliseo:

No es necesario que crees una función especifica para esto, pues MySQL tiene bastantes funciones de hora y fecha que te pueden ayudar a obtener lo que quieres:

¿Probaste usar la función TIMESTAMPDIFF que de puse? esa función te regresa exactamente lo que necesitas es decir LOS AÑOS QUE TIENE FALLECIDA CIERTA PERSONA. Tal pareciera que ni siquiera te tomaste el tiempo en leer el post completo, ojo con eso.

1
SELECT id, TIMESTAMPDIFF(YEAR,fech_def, CURDATE()) FROM fallecido;


Si la consulta no es lo que esperas, pues deberías decirnos que está mal, para poder tratar de ayudarte.

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

procedimientos almacenados

Publicado por eliseo (3 intervenciones) el 20/10/2011 03:13:23
Si me funciono tu ayuda; gracias por todo.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar