MySQL - Problema con una función (dni)

 
Vista:
Imágen de perfil de christian
Val: 1
Ha disminuido su posición en 213 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

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
sin imagen de perfil
Val: 293
Oro
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Problema con una función (dni)

Publicado por Rafael (83 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
Revisar política de publicidad