2017-06-23 1 views
0

J'utilise la fonction ci-dessous pour découper une chaîne. Je reçois l'erreur lorsque je tente de créer la fonction sur ma base de données en direct suivantes:Mysql Fonction déterministes Erreur

Cette fonction n'a rien de DETERMINISTE, NO SQL ou SQL lit les données dans sa déclaration et l'enregistrement binaire est activée.

La fonction n'atteint pas la base de données. Tout ce qu'il fait est de rompre une chaîne. Donc, si j'envoie '1,2,3,4', cela les divise. Comment puis-je surmonter cette erreur? Je ne modifie en fait aucune table.

DELIMITER ;; 
CREATE FUNCTION `stringSplit`(
x VARCHAR(255), 
delim VARCHAR(12), 
pos INT) RETURNS varchar(255) CHARSET latin1 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, ',', pos), 
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '') ;; 
DELIMITER ; 

****** ****** Mise à jour

Je reçois le code d'erreur suivant.

ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled 

Je pense qu'il est correct en ajoutant 'DETERMINISTIC' avant l'instruction return. Je pense que c'est une question différente concernant les privilèges.

+0

Works pour moi. Voir ici: http://sqlfiddle.com/#!9/6e43c/5 Peut-être que vous avez besoin de changer votre délimiteur à //? –

+0

Quelle est l'erreur exacte que vous obtenez? –

+2

Tout comme le message d'erreur vous dit: votre fonction doit être 'DETERMINISTIC' (ou l'un des deux autres) si l'enregistrement binaire est activée. Puisque votre fonction est réellement déterministe, tout ce que vous devez faire est de dire à MySQL qu'en ajoutant le mot 'DETERMINISTIC' devant' RETURN' (pas 'returns'). – Solarflare

Répondre

0

Il était question des droits d'utilisateur. J'ai changé les utilisateurs et le code travaillé avec le

Deterministic Return 

ajouté à la fonction.