2009-10-28 7 views
0

Je viens d'un arrière-plan MS SQL Server. Travail sur un nouveau projet en utilisant MySQL avec les outils d'administration de NaviCat 8. Ok, voici la question. Normalement, lorsque vous travaillez dans le monde MS si je veux mettre à jour certaines données que j'utilise une procédure stockée pour ce faire:Procédures stockées MySQL

Drop Procedure spNew 
Create Procedure spNew (@P_Param) 

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

Je suis en train de faire cette même logique à l'intérieur navicat. I défini le paramètre, (IN '@P_Param' int)

Dans la définition i placé:

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

Lorsque je tente et enregistrer la procédure stockée, j'obtiens cette erreur: « 1064 - Vous avez une erreur dans votre Syntaxe SQL, bla, bla, bla "

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

Merci.

Répondre

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

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

Vous pouvez aussi avoir besoin de définir delimiter:

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 est un mot réservé.

Si vous le faites, vous devez enfermer dans cette contre-apostrophes comme:

DELIMITER $$ 

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

DELIMITER ; 
+0

Je me rends compte les idéologies sont très différentes. Logiquement, j'ai pu entrer et comprendre ce que je fais pour la plupart. Après avoir supprimé le '@', je reçois toujours une erreur de syntaxe. – EWizard

+0

Toujours pas de dés avec le délimiteur. Est-il sûr de dire que les procédures stockées ne sont pas souvent utilisées par MySQL? – EWizard

+0

Il est plus sûr de dire que 'NaviCat 8' n'est pas utilisé :) Je viens de le reproduire sur' Query Browser' (livré avec 'MySQL'), tout va bien. – Quassnoi

0

Les paramètres des procédures stockées MySQL ne sont pas préfixés avec @ ou cités dans la déclaration soit ou lorsqu'elle est utilisée. Les variables locales sont précédées de @, cependant.

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; 
Questions connexes