MySQL - PROCEDIMIENTO ALMACENADO

 
Vista:

PROCEDIMIENTO ALMACENADO

Publicado por Javi (1 intervención) el 24/10/2018 00:06:08
Soy nuevo con MySQL solicito ayuda por favor para encontrar el error en este codigo me da error en la linea 21, gracias

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
CREATE PROCEDURE ElPersonal(
In _DniPersonal varchar(8),
in _APaterno varchar(12),
in _AMaterno varchar(12),
in _Nombres varchar(12),
in _FNac date,
in _Edad int,
in _Genero varchar(10),
in _Direccion varchar(50),
in _Region varchar(10),
in _Provincia varchar(25),
in _Distrito varchar(50),
in _Correo varchar(20),
in _Cargo varchar(20),
in _Condicion varchar(50),
in _Profesion varchar(50),
in _Celular varchar(9),
out _MENSAJE varchar(100))
BEGIN
 
IF EXISTS(SELECT * FROM Personal WHERE DniPersonal=_DniPersonal)  THEN
SET _MENSAJE='Número de Dni: '+ _DniPersonal +' Ya Se Encuentra Registrado'
ELSE
INSERT INTO Personal VALUES(_DniPersonal,_APaterno,_AMaterno,_Nombres,_FNac,_Edad,_Genero,_Direccion,_Region,_Provincia,_Distrito,_Correo,_Cargo,_Condicion,_Profesion,_Celular)
SET _MENSAJE='Se Registro Correctamente..'
END IF
END
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

PROCEDIMIENTO ALMACENADO

Publicado por leonardo_josue (414 intervenciones) el 25/10/2018 15:24:00
Hola Javi:

¿Y cuál es el error que te devuelve MySQL si se puede saber? siempre que digas que una consulta o código te marca error, DEBES DE INCLUIR LOS CÓDIGOS Y MENSAJES DE ERROR QUE TE ARROJA EL DBMS, ya que ahí puede haber información adicional que pueda servirte y servidor para darnos cuentas de qué puede estar mal.

De entrada te comento que te hace falta un punto y coma (;) después de setear los mensajes a la variable de salida y del END IF, checa este ejemplo:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
mysql> SELECT * FROM tabla;
+------+---------------------+---------------------+
| id   | campo1              | campo2              |
+------+---------------------+---------------------+
|    1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
|    2 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+------+---------------------+---------------------+
2 rows in set (0.00 sec)
 
mysql> DROP procedure IF EXISTS `ElPersonal`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
mysql> DELIMITER $$
mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `ElPersonal`(In _DniPersonal varchar(8), out _MENSAJE varchar(100))
    -> BEGIN
    -> IF EXISTS(SELECT * FROM tabla WHERE id=_DniPersonal)  THEN
    ->       set _MENSAJE = 'ya existe';
    -> ELSE
    ->       set _MENSAJE = 'nuevo';
    -> END IF;
    -> END$$
Query OK, 0 rows affected (0.00 sec)
 
mysql> DELIMITER ;
mysql> CALL ElPersonal (1, @salida);
Query OK, 0 rows affected (0.00 sec)
 
mysql> select @salida;
+-----------+
| @salida   |
+-----------+
| ya existe |
+-----------+
1 row in set (0.00 sec)
 
mysql> CALL ElPersonal (3, @salida);
Query OK, 0 rows affected (0.00 sec)
 
mysql> select @salida;
+---------+
| @salida |
+---------+
| nuevo   |
+---------+
1 row in set (0.00 sec)

Es importante que definas qué DELIMITADOR por defecto vas a utilizar en el SP, ya que de lo contrario esto te puede ocasionar problemas.

Haz la prueba y nos comentas.

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