Newer Versions of MySQL have the binary log which will generate te following error
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)To fix this you need incude the following keywords
CONTAINS SQL
indicates that the routine does not contain statements that read or write data. This is the default if none of these characteristics is given explicitly. Examples of such statements are SET @x = 1
or DO RELEASE_LOCK('abc')
, which execute but neither read nor write data.
NO SQL
indicates that the routine contains no SQL statements.
READS SQL DATA
indicates that the routine contains statements that read data (for example, SELECT
), but not statements that write data.
MODIFIES SQL DATA
indicates that the routine contains statements that may write data (for example, INSERT
or DELETE
).
Ther referenced artical indicates using
SET GLOBAL log_bin_trust_function_creators = 1;
Referenceshttp://mvnrepository.blogspot.com/2009/08/this-function-has-none-of-deterministic.html
Example DELIMITER $$
DROP FUNCTION IF EXISTS `adadmin_adem`.`fDeleteTheme` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `fDeleteTheme`(id_in INTEGER) RETURNS int(11)
DETERMINISTICREADS SQL DATAMODIFIES SQL DATABEGIN
DECLARE counter INTEGER;
DECLARE parent_id INTEGER;
SELECT count(id_theme) FROM s_themes where parent = id_in INTO counter;
IF counter = 0 THEN
SELECT parent FROM s_themes where id_theme = id_in INTO parent_id;
DELETE FROM adem.s_themes WHERE id_theme = id_in;
END IF;
RETURN parent_id;
END $$
DELIMITER ;