Question

Je viens d'un contexte MS SQL Server. Travailler sur un nouveau projet utilisant MySQL avec les outils d’administration NaviCat 8. Ok, voici la question. Normalement, lorsque je travaille dans un pays MS, si je souhaite mettre à jour des données, j'utilise une procédure stockée pour le faire:

Drop Procedure spNew
Create Procedure spNew (@P_Param)

UPDATE Table
SET Field = 'some value'
WHERE ID = @P_Param

J'essaie de suivre la même logique depuis NaviCat. J'ai défini le paramètre, (IN '@P_Param' int)

Dans la définition, j'ai placé:

BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = @P_Param
END;

Lorsque j'essaie de sauvegarder la procédure stockée, le message d'erreur suivant s'affiche: "1064 - Vous avez une erreur dans votre syntaxe SQL: blah, blah, blah"

Quelqu'un peut-il au moins me diriger dans la bonne direction?

Merci.

Était-ce utile?

La solution

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param;
END;

Notez que la syntaxe MySQL et l'idéologie globale sont très différentes de celles de SQL Server .

Vous devrez peut-être également définir le délimiteur:

DELIMITER $

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param;
END;
$

DELIMITER ;

BTW, je suppose que vous n'appelez pas réellement votre table "table" , car il s'agit d'un mot réservé.

Si vous le faites, vous devez le placer entre guillemets comme ceci:

DELIMITER $

CREATE PROCEDURE spNew(P_Param INT)
BEGIN
     UPDATE `Table`
     SET    `Field` = 'some value'
     WHERE  `ID` = P_Param;
END;
$

DELIMITER ;

Autres conseils

Les paramètres des procédures stockées MySQL ne portent pas le préfixe @, ni ne sont cités dans la déclaration ou lorsqu'ils sont utilisés. Les variables locales portent toutefois le préfixe @.

Essayez:

DROP PROCEDURE IF EXISTS spNew;
CREATE PROCEDURE spNew(IN P_Param INT)
BEGIN
     UPDATE Table
     SET Field = 'some value'
     WHERE ID = P_Param
END;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top