MySQL - Problema con una función (dni)

   
Vista:
Imágen de perfil de christian

Problema con una función (dni)

Publicado por christian cristian_nero12_@hotmail.com (1 intervención) el 25/02/2018 11:34:03
Hola chicos este es mi primer post y espero que me podais ayudar con un problema que tengo en un ejercicio, se me ha pedido crear una función almacenada en MySQL que se le pase como parámetro el NIF (DNI+Letra) tipo fijo de 9 caracteres y que devuelva el valor de 1 si el número del posible DNI lleva asociada su letra correspondiente o devuelva 0 si el número de DNI lleva asociada una letra incorrecta.
Este es el codigo que tengo pero no me compila:

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
46
47
48
49
50
51
52
53
54
55
56
DELIMITER $$
DROP function IF EXISTS actividad1$$
create function actividad1 (dni INT(8), let varchar(1)) returns int(1)
begin
declare letra varchar(100);
if (dni%23) = '0' then
set letra = 't';
elseif (dni%23) = '1' then
set letra='r';
elseif (dni%23) = '2' then
set letra='w';
elseif (dni%23) = '3' then
set letra='a';
elseif (dni%23) = '4' then
set letra='g';
elseif (dni%23) = '5' then
set letra='m';
elseif (dni%23) = '6' then
set letra='y';
elseif (dni%23) = '7' then
set letra='f';
elseif (dni%23) = '8' then
set letra='p';
elseif (dni%23) = '9' then
set letra='d';
elseif (dni%23) = '10' then
set letra='x';
elseif (dni%23) = '11' then
set letra='b';
elseif (dni%23) = '12' then
set letra='n';
elseif (dni%23) = '13' then
set letra='j';
elseif (dni%23) = '14' then
set letra='z';
elseif (dni%23) = '15' then
set letra='s';
elseif (dni%23) = '16' then
set letra='q';
elseif (dni%23) = '17' then
set letra='v';
elseif(dni%23) = '18' then
set letra='h';
elseif (dni%23) = '19' then
set letra='l';
elseif (dni%23) = '20' then
set letra='c';
elseif (dni%23) = '21' then
set letra='k';
elseif (dni%23) = '22' then
set letra='e';
end if;
return letra;
if letra = let return '1'
else return '0';
end;$$
Captura
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

Problema con una función (dni)

Publicado por Rafael (70 intervenciones) el 26/02/2018 10:40:25
Hola

Dices "NO ME COMPILA" pero no pones el error...

Asi que jugando al adivino ... te comento algunos temas que por simple logica pueden ser la causa ...

1. Estas recibiendo un INT al que le estas calculando el MODULO de 23 ... Hasta ahi correcto, el problema es que lo comparas contra un caracter ... ejemplo
1
if (dni%23) = '0' then

Ese CERO deberia ir sin comillas para que siga siendo un NUMERO, no un caracter.

2. Cuando terminas las comparaciones RETORNAS un CARACTER, y has declarado la funcion como un INT
1
2
3
4
end if;
return letra;
if letra = let return '1'
else return '0';

Vaya que el return letra; "NO" deberia de ir ....

3. Luego comparas letra a let, correcto ¿y el "THEN"?
4. Bueno y la guinda del pastel insisto devuelve INT no caracter

Quita las comillas en el return...
1
2
3
4
5
if letra = let then
return 1;
else
return 0;
end if;
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