2010-04-12 5 views
0

J'utilise la requête suivante mysql,Quel est le problème avec la requête mysql?

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `allied`.`aboutus_delete`$$ 
CREATE DEFINER=`allied`@`%` PROCEDURE `aboutus_delete`(
IN p_Id int(11) 
) 
BEGIN 
    if exists( select aboutUsId 
        from aboutus 
       where aboutUsId=p_id 
        and isDeleted=0 
      ) 
     update aboutus set isDeleted=1 where aboutUsId=p_id 
    else 
     select 'No record to delete' 
END$$ 
DELIMITER ; 

Mais je reçois cette erreur quand je l'exécute ...

Error Code : 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 
'update aboutus set isDeleted=1 where aboutUsId=p_id 
else 
    select 'No record to' at line 6 

EDIT:

à l'aide ne semble pas virgule à travail,

if exists(select aboutUsId from aboutus where aboutUsId=p_id and 
isDeleted=0) then 
    update aboutus set isDeleted=1 where aboutUsId=p_id; 
else 
    select 'No record to delete'; 
+0

ce n'est pas une requête, c'est une procédure créer un script – lexu

+0

@lexu ya sa procédure, mais pourquoi je reçois cette erreur? – bala3569

+0

juste pour la complétude - sont des points-virgules requis dans SP dans MySQL? – Axarydax

Répondre

2

Ceci est un problème différent: vous pouvez optimiser cette procédure un peu. Pourquoi cliquer deux fois sur le magasin de données lorsqu'une requête est effectuée? Définissez simplement l'attribut isDeleted sur 1 et vérifiez la valeur row_count par la suite.

BEGIN 
    UPDATE aboutus SET isDeleted = 1 WHERE aboutUsId = p_id AND isDeleted = 0; 
    IF (SELECT row_count()) <= 0 THEN 
    SELECT 'No record to delete'; 
    END IF; 
END 
0

Vous avez manqué le 'THEN' dans 'IF' ...

+0

@ziang c'est une déclaration si existe .. – bala3569

+0

@ziang ajoutant alors ne fonctionne pas ... – bala3569

+0

Vous avez également besoin de la fin si – zsong

0

Avec les points-virgules et THEN, il vous manque END IF pour terminer l'instruction IF.