Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2007, 17h11   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Par défaut Débutant et problèmes de procédures / fonctions

Bonjour,

J'aborde les procédures et fonctions MySQL et j'ai un petit problème :

Je souhaite parcourir un champ VARCHAR(20) d'une table et concaténer ce qui est trouvé à une variable puis retourner cette variable :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
DELIMITER $$
 
DROP FUNCTION IF EXISTS `cdf`.`essaif`$$
CREATE FUNCTION `cdf`.`essaif` () RETURNS TEXT
BEGIN
DECLARE liste TEXT DEFAULT '';
DECLARE psn TEXT DEFAULT '';
LOOP
SELECT probeset_name INTO psn FROM probeset;
SET liste = CONCAT(liste, psn);
END LOOP;
RETURN liste;
END$$
 
DELIMITER ;
J'ai une erreur :

Code :
1
2
 
ERROR 1418 (HY000): 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)
Par ailleurs, je n'ai pas cette erreur si je passe le code en tant que procédure, mais j'ai une erreur de renvoi de plusieurs lignes.

Sauriez-vous par ailleurs comment gérer le stockage et renvoi de plusieurs lignes (sur plusieurs occurences d'une table) au sein d'une procédure (j'utilisais %ROWTYPE avec PostgreSQL et un type RECORD pour le renvoi) ?

En vous remerciant,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2007, 09h26   #2
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Bonjour,

Je ne m'y connais pas trop en procédure et autre fonctions, mais en gros le message d'erreur signifie que cette création de méthode est considérée comme non déterministe. Il faut comprendre que son résultat pourrait être aléatoire. D'autre part, si les logs binaires sont configurés, il est possible que une requête d'insertion utilisant cette méthode y soit inscrite. Ces logs binaires permettant diverses fonctions d'administration (réplication, sauvegarde,...) il est impératif que ses requêtes aient toujours les même conséquences. C'est le contraire de l'aléatoire de la fonction créée par la requête décrite. Il faut rajouter DETERMINISTIC.

Lien vers le manuel
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2007, 11h46   #3
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bonjour et merci de la réponse,

Les logs binaires sont effectivement actifs sur ma base.

J'ai fixé la variable :

SET GLOBAL log_bin_trust_function_creators = 1

dans mysql (la base) pour résoudre ce problème.

Je pense également réinjecter mes fonctions qui sont actuellement NOT DETERMINISTIC (par défaut).

Bonne journée,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h52.


 
 
 
 
Partenaires

Hébergement Web