Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] crear funciones

Estas en el tema de crear funciones en el foro de Mysql en Foros del Web. Hola, estoy realizando una funcion que me devuelva 1 o 0 si el numero es primo o no, me da error de sintaxis, si me ...
  #1 (permalink)  
Antiguo 21/01/2014, 10:15
 
Fecha de Ingreso: octubre-2013
Ubicación: madrid
Mensajes: 28
Antigüedad: 10 años, 6 meses
Puntos: 0
crear funciones

Hola, estoy realizando una funcion que me devuelva 1 o 0 si el numero es primo o no, me da error de sintaxis, si me pudieran ayudar, un saludo y gracias
Código:
CREATE FUNCTION numprimo(n INT)
RETURNS INT
BEGIN
    DECLARE num INT;
	DECLARE i int;
	DECLARE primo int;
    SET i = 2;
	IF n < 2 THEN
        RETURN(0);
    ELSEIF n = 2 THEN 
        RETURN(1);
    ELSE
        SET primo = 1; 
        loop1: WHILE i <= SQRT(n) DO
            IF (n%i) = 0 THEN
                SET primo = 0;
                LEAVE loop1;
            END IF;
            SET i = i +1;
        END WHILE loop1;
    
        RETURN (primo);
    END IF;
END; $$

SELECT numprimo(15) as 'Es Primo?';$$
  #2 (permalink)  
Antiguo 21/01/2014, 14:31
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: crear funciones

Hola skreal:

No nos dices donde te está marcando el error, ni tampoco nos dices en qué momento te está marcando el error, por lo tanto es algo complicado poder ayudarte...

Creo que el problema en realidad es tan simple como el quitar el (;) del último SELECT, pero a reserva de que nos digas el error, estoy sólo haciendo suposiciones.

Haciendo la prueba en un SQL 5.6.12 la función se puede crear y aparentemente funciona correctamente:

Código MySQL:
Ver original
  1. mysql> SHOW VARIABLES LIKE "version";
  2. +---------------+--------+
  3. | Variable_name | Value  |
  4. +---------------+--------+
  5. | version       | 5.6.12 |
  6. +---------------+--------+
  7. 1 row in set (0.01 sec)
  8.  
  9. mysql> DELIMITER $$
  10. mysql> CREATE FUNCTION numprimo(n INT)
  11.     -> RETURNS INT
  12.     -> BEGIN
  13.     ->     DECLARE num INT;
  14.     ->  DECLARE i INT;
  15.     ->  DECLARE primo INT;
  16.     ->     SET i = 2;
  17.     ->  IF n < 2 THEN
  18.     ->         RETURN(0);
  19.     ->     ELSEIF n = 2 THEN
  20.     ->         RETURN(1);
  21.     ->     ELSE
  22.     ->         SET primo = 1;
  23.     ->         loop1: WHILE i <= SQRT(n) DO
  24.     ->             IF (n%i) = 0 THEN
  25.     ->                 SET primo = 0;
  26.     ->                 LEAVE loop1;
  27.     ->             END IF;
  28.     ->             SET i = i +1;
  29.     ->         END WHILE loop1;
  30.     ->
  31.     ->         RETURN (primo);
  32.     ->     END IF;
  33.     -> END; $$
  34. Query OK, 0 rows affected (0.00 sec)
  35.  
  36. mysql> DELIMITER ;
  37. mysql> SELECT numprimo(2);
  38. +-------------+
  39. | numprimo(2) |
  40. +-------------+
  41. |           1 |
  42. +-------------+
  43. 1 row in set (0.00 sec)
  44.  
  45. mysql> SELECT numprimo(4);
  46. +-------------+
  47. | numprimo(4) |
  48. +-------------+
  49. |           0 |
  50. +-------------+
  51. 1 row in set (0.00 sec)
  52.  
  53. mysql> SELECT numprimo(5);
  54. +-------------+
  55. | numprimo(5) |
  56. +-------------+
  57. |           1 |
  58. +-------------+
  59. 1 row in set (0.00 sec)
  60.  
  61. mysql> SELECT numprimo(6);
  62. +-------------+
  63. | numprimo(6) |
  64. +-------------+
  65. |           0 |
  66. +-------------+
  67. 1 row in set (0.00 sec)
  68.  
  69. mysql> SELECT numprimo(7);
  70. +-------------+
  71. | numprimo(7) |
  72. +-------------+
  73. |           1 |
  74. +-------------+
  75. 1 row in set (0.00 sec)

OJO: observa que antes de crear la función indico que el delimitador será el ($$), pero en cuanto termino de crear la función lo devuelvo a (;) checa a ver si es ahí el problema.

Saludos
Leo
  #3 (permalink)  
Antiguo 22/01/2014, 01:46
 
Fecha de Ingreso: octubre-2013
Ubicación: madrid
Mensajes: 28
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: crear funciones

He revisado mi codigo y el ; que me comentas debia ser el fallo, si el delimiter lo añadi al principio, te lo agradezco le habia dado muchas vueltas, un saludo :)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:29.