2009-03-17 9 views
0

Je suis nouveau à la syntaxe MySQL.MySQL Query

J'ai créé une procédure et l'ai exécutée, mais elle montre un peu de syntaxe, pouvez-vous m'aider?

Ma procédure est que:

**DELIMITER $$ 
CREATE PROCEDURE TestAdd(
    in mODE varchar(10), 
    in Id int, 
    in AttName varchar(10), 
    in AttValues Varchar(10) 
) 
IF EXISTS (SELECT * FROM AttTable WHERE id=Id) THEN 
    SET Mode='Modify' 
ELSE 
    SET Mode='Add' 
    Start Transaction 
    BEGIN 
     IF (mODE='Add') THEN 
      insert into atttable values (Id, AttName, AttValue); 
     ELSE (if Mode='Modify') then 
      update AttTable set AttName=AttName, AttValue= AttValue where Id=Id; 
     END IF 
    END 
$$ 
Delimiter ;** 

Whre je suis doin mal ?? Merci d'avance.

+2

Vous devez nous dire comment cela échoue. – chaos

+1

Qu'est-ce que c'est censé faire? Que fait-il réellement? Et pourquoi n'est-il pas formaté pour être le moins lisible? – kquinn

+0

aussi, regardez dans la syntaxe SELECT FOR UPDATE ou vous vous retrouverez avec des conditions de course – yaauie

Répondre

2

Vous avez besoin d'un BEGIN juste après la liste des paramètres au début, et un correspondant END à la fin de la procédure:

create procedure TestAdd(blah...) 
BEGIN 
    ... 

END$$ 

Votre premier IF appel manque à la fois THEN et END IF:

if exists (select * from AttTable where id=Id) THEN 
    set... 
ELSE 
    set... 
END IF 

Chaque instruction doit être terminée avec ;

set Mode='Modify'; 
set Mode='Add'; 
Start Transaction; 
+0

Etes-vous sûr que les instructions doivent être terminées avec un; –