para los que no les deja crear las funciones usando source https://stackoverflow.com/questions/26015160/deterministic-no-sql-or-reads-sql-data-in-its-declaration-and-binary-logging-i
-
check_circle_outlineMódulo 1 | 8 clases
Introdución
expand_more -
check_circle_outlineMódulo 2 | 3 clases
Servidor de base de datos
expand_more -
check_circle_outlineMódulo 3 | 10 clases
Base de datos y tablas
expand_more -
check_circle_outlineMódulo 4 | 8 clases
Restricciones
expand_more -
check_circle_outlineMódulo 5 | 2 clases
Modificar tablas
expand_more -
check_circle_outlineMódulo 6 | 12 clases
Sentencias basicas
expand_more -
check_circle_outlineMódulo 7 | 8 clases
Funciones
expand_more-
done_all
Clase 1
Funciones en SQL
-
done_all
Clase 2
Funciones sobre strings
-
done_all
Clase 3
Funciones sobre números
-
done_all
Clase 4
Funciones sobre fechas
-
done_all
Clase 5
Funciones sobre condiciones
-
done_all
Clase 6
Crear función
-
done_all
Clase 7
Listar funciones
-
done_all
Clase 8
Ejecutar sentencias dentro de funciones
-
-
check_circle_outlineMódulo 8 | 12 clases
Sentencias avanzadas
expand_more -
check_circle_outlineMódulo 9 | 7 clases
Joins
expand_more -
check_circle_outlineMódulo 10 | 4 clases
Vistas
expand_more -
check_circle_outlineMódulo 11 | 7 clases
Procedimientos
expand_more -
check_circle_outlineMódulo 12 | 4 clases
Transacciones
expand_more -
check_circle_outlineMódulo 13 | 5 clases
Extras
expand_more -
check_circle_outlineMódulo 14 | 5 clases
Triggers
expand_more -
check_circle_outlineMódulo 15.-
Examen del curso
expand_more-
done_all
Examen
Examen final del curso
-
12 comentario(s)
Lo que a mí me funcionó fue lo siguiente:
DELIMITER //
CREATE FUNCTION obtener_paginas()
RETURNS INT
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE paginas INT;
SET paginas = ROUND(RAND() * 100) * 4;
RETURN paginas;
END//
DELIMITER ;
En MySQL 8.0 me dejo crear esta función de la siguiente forma:
DELIMITER #
CREATE FUNCTION obtener_paginas()
RETURNS INT
READS SQL DATA
DETERMINISTIC
BEGIN
SET @paginas = (SELECT (ROUND( RAND() * 100)* 4));
RETURN @paginas;
END#
DELIMITER ;
UPDATE libros SET paginas = obtener_paginas();
SELECT * FROM libros;
ERROR 1064 (42000) at line 190 in file: './sentencias.sql': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER ;
SELECT name FROM mysql.proc WHERE db = database() AND type = 'FU...' at line 1
ERROR 1064 (42000) at line 201 in file: './sentencias.sql': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'RETURN INT
BEGIN
SET @paginas = (SELECT (ROUND(RAND()*100)*4));
RETURN @p...' at line 2
ERROR 1305 (42000) at line 208 in file: './sentencias.sql': FUNCTION libreria_cf.obtener_paginas does not exist
Esta es la funcion:
DELIMITER //
SELECT actualizar_titulo_libro('El principito');
Me marca el siguiente error cuando creo la funcion
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@nombre_nuevo VARCHAR(50))
RETURNS VARCHAR
BEGIN
SET @nombre_nuevo = (UPDATE' at line 1
mysql>
mysql> CREATE FUNCTION obtene_paginas ()
-> RETURNS INT
-> BEGIN
-> SET @Paginas = (SELECT (ROUND(RAND() * 100 ) * 4))
-> END
->
-> DELIMITER ;
Estas sentencias no me funcionan, no relizan la operación esperada y debo dar exit; o \c paa poder seguir
esta parte del curso no la he podio completar.
Al ejecutar la función me genera Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable).
Tras buscar origen del mismo, conseguí que es que variable global log_bin_trust_function_creators esta inicializada en 0 y debería ser 1 por lo que por lógica coloque como primera linea de instrucción SET GLOBAL log_bin_trust_function_creators = 1;
Aunque, me funciono, ¿sera que hay otra forma más optima?.
Gracias de antemano por sus aportes.
Clase 47