2012-04-23 47 views
0

裏面我要檢查特定記錄是否存在等在db表,如果它的存在,update如果不是我要添加新的記錄獲取結果從update語句出現存儲過程

我使用存儲過程這樣做,首先我做了更新步驟,並且想檢查它是否發生並返回0,然後沒有受更新語句影響的記錄,這意味着記錄不存在。

我作出這樣

DELIMITER // 
CREATE PROCEDURE revokePrivilegeFromUsers(IN userId int(11), IN privilegeId int(11), IN deletedBy int(11)) 

BEGIN 
    DECLARE isExist int; 

    isExist = update `user_privileges` set `mode` ='d' ,`updated_by` = deletedBy, `date_time_assigned` = CURRENT_TIMESTAMP() where `user_id`= userId and `privilege_id`=privilegeId; 

IF isExist == 0 THEN 
     insert into `user_privileges`(`user_id`,`privilege_id`,`mode`,`date_time_assigned`,`updated_by`)values (userId ,privilegeId ,'d',CURRENT_TIMESTAMP(),deletedBy); 

END IF; 


END // 

DELIMITER ; 

這個錯誤我

#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 `user_privileges` set `mode` ='d' ,`updated_by` = deletedBy, `date_time' at line 6 

發生是我工作的方式是由MySQL支持?

+0

我認爲這裏不需要php標籤。 – 2012-04-23 08:43:02

+0

PHP標籤在哪裏? – palAlaa 2012-04-23 08:46:14

+1

我已經爲您編輯了標籤。 – Maerlyn 2012-04-23 08:51:00

回答

0

使用INSERT忽略語句。我假設你的表有(user_id,privilege_id)作爲唯一鍵。

insert ignore into user_privileges (user_id,privilege_id,`mode,date_time_assigned,updated_by) 
values (userId ,privilegeId ,'d',CURRENT_TIMESTAMP(),deletedBy) 
on duplicate key update mode='d', date_time_assigned=now(),updated_by=deletedBy 
0

我解決問題,我有2個prblems

  1. ROW_COUNT()用於獲取受影響的插入,更新行數或刪除語句。
  2. 的Equals在存儲過程比較=不是==

正確的存儲過程是

DELIMITER // 
CREATE PROCEDURE revokePrivilegeFromUsers(IN userId int(11), IN privilegeId int(11), IN deletedBy int(11)) 

BEGIN 
DECLARE count int default -1; 

update `user_privileges` set `mode` ='d' ,`updated_by` = deletedBy, `date_time_assigned` = CURRENT_TIMESTAMP() where `user_id`= userId and `privilege_id`=privilegeId; 
SELECT ROW_COUNT() into count ; 
IF count = 0 THEN 
     insert into `user_privileges`(`user_id`,`privilege_id`,`mode`,`date_time_assigned`,`updated_by`)values (userId ,privilegeId ,'d',CURRENT_TIMESTAMP(),deletedBy); 

END IF; 
END // 

DELIMITER ; 
相關問題