Question

J'ai le problème suivant.

Je veux créer une fonction stockée qui convertit un entity_id dans le sku correspondant

Voici le code:

CREATE FUNCTION `id2sku`(`entity_id_in` INT)
    RETURNS VARCHAR
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE returnvalue varchar(50);

    SELECT `sku` INTO returnvalue FROM catalog_product_entity WHERE entity_id = entity_id_in LIMIT 1;

    return returnvalue;
END

Maintenant, mon problème est que si je tire la requête que je reçois le message suivant: [Titre de fenêtre] Erreur

SQL Error (1064): 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 'LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT' at line 3

La im db en utilisant MySQL est 5.0.51a

Merci d'avance pour vos idées.

Était-ce utile?

La solution

MySQL par utilisation par défaut ; comme un séparateur, de sorte que lorsqu'il rencontre le ; à la ligne 9:

 DECLARE returnvalue varchar(50);

MySQL pense que les extrémités de commande - il tente d'exécuter:

CREATE FUNCTION `id2sku`(`entity_id_in` INT)
    RETURNS VARCHAR(50)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE returnvalue varchar(50);

qui n'est pas valide SQL.

Définir un nouveau séparateur:

 DELIMITER $$

 CREATE FUNCTION `id2sku`(`entity_id_in` INT)
    RETURNS VARCHAR(50)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE returnvalue varchar(50);

    SELECT `sku` INTO returnvalue FROM catalog_product_entity WHERE entity_id = entity_id_in LIMIT 1;

    return returnvalue;
END
$$

Vous pouvez alors changer le dos delimiter avec:

DELIMITER ;

Autres conseils

Cela devrait fonctionner:

DELIMITER $$

CREATE FUNCTION `id2sku`(`entity_id_in` INT)
    RETURNS VARCHAR(50)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE returnvalue VARCHAR(50);

    SELECT `sku` INTO returnvalue FROM catalog_product_entity WHERE entity_id = entity_id_in LIMIT 1;

    RETURN returnvalue;

    END$$

DELIMITER ;

Vous ne précisaient pas la longueur de varchar. : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top