J'essaie d'écrire une fonction MySQL avec un SELECT INTÉRIEUR, mais obtenez toujours un retour nul
CREATE FUNCTION test (i CHAR)
RETURNS CHAR
NOT DETERMINISTIC
BEGIN
DECLARE select_var CHAR;
SET select_var = (SELECT name FROM table WHERE id = i);
RETURN select_var;
END$$
mysql> SELECT test('1')$$
+-----------------+
| test('1') |
+-----------------+
| NULL |
+-----------------+
1 row in set, 1 warning (0.00 sec)
mysql>
mysql>
mysql> SHOW WARNINGS
-> $$
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'i' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
5 Réponses :
Essayez de spécifier la taille du type de retour code>. Par exemple, si le nom peut être de 20 caractères, essayez
Merci!! Pensait que juste définir que le caractère serait automatique.
fonctionne avec ceci:
CREATE FUNCTION test (i CHAR) RETURNS VARCHAR(SIZE) NOT DETERMINISTIC BEGIN DECLARE select_var VARCHAR(SIZE); SET select_var = (SELECT name FROM table WHERE id = i); RETURN select_var; END$$
Vous avez une table nommée table? Échappez ce nom si c'est vraiment ce qu'il est: ou mettre le nom de la table dans .... Il semble manquant p> P>
Vous avez une erreur dans votre code, si vous n'avez besoin que d'un résultat, vous l'obtenez à partir d'une simple sélection d'une affiliation avec le mot
DELIMITER $$
USE `mydatabase`$$
DROP FUNCTION IF EXISTS `fnGetActiveEventId`$$
CREATE DEFINER=`mydbuser`@`%` FUNCTION `fnGetActiveEventId`() RETURNS INT(11)
BEGIN
SET @eventId = (SELECT EventId FROM `Events` WHERE isActive=1 ORDER BY eventId DESC LIMIT 1);
RETURN @eventId;
END$$
DELIMITER ;
Cela pourrait être évident mais y a-t-il une rangée dans la table avec ID = 1?
Lorsque j'exécute le choix seul, il revient avec un résultat.
Ne pensez pas que cela causerait cette erreur.
est la colonne "nom" de type char?
Vous avez oublié de nous dire quel était le résultat attendu, ou quel est le schéma de la table, ou à quoi ressemblent son contenu.
Le résultat est que j'ai reçu le nom (Varchar). Mais vous ne pouvez pas faire
retour varchar code>.