2010-04-12 4 views
0

Я использую следующий запрос MySQL,Что не так с запросом 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 ; 

Но я получаю эту ошибку, когда я исполняю его ...

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:

используя точку с запятой, кажется, не работы,

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

это не запрос, это сценарий создания процедуры – lexu

+0

@lexu ya его процедура, но почему я получаю эту ошибку? – bala3569

+0

только для полноты - нужны точки с запятой внутри SP в MySQL? – Axarydax

ответ

2

Это другая проблема: вы можете немного оптимизировать эту процедуру. Зачем дважды ударять хранилище данных, когда будет выполняться один запрос? Просто установите для атрибута isDeleted значение 1 и затем проверьте значение row_count.

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

Вы пропустили «THEN» в «IF» ...

+0

@ziang это оператор if .. – bala3569

+0

@ziang добавление тогда не работает ... – bala3569

+0

Вам также нужен конец if – zsong

0

Наряду с точками с запятой и ТОГДА вам не хватает END IF, чтобы прервать инструкцию IF.