2012-12-11 53 views
0

你能告訴我什麼是錯的嗎?我想有一個可以執行更新和插入操作的存儲過程。在存儲過程中更新和插入操作

CREATE PROCEDURE `save_user`(IN `sp_aliasName` VARCHAR(100),IN `sp_password` VARCHAR(100), IN `sp_sex` VARCHAR(100), IN `sp_age` INT(11), IN `sp_userGroup` VARCHAR(100),OUT `sp_number_of_user` INT)  
BEGIN 
DECLARE temp INT; 
SELECT COUNT(user_id) INTO sp_number_of_user FROM user WHERE aliasName = sp_aliasname; 
temp := sp_number_of_user; 
IF temp > 0 
THEN 
UPDATE user SET aliasName=sp_aliasName,password=sp_password,sex=sp_sex,age=sp_age,userGroup=sp_userGroup 
WHERE aliasName = sp_aliasname ; 
ELSE 
INSERT INTO user (aliasName,password,sex,age,userGroup) 
values (sp_aliasName,sp_password,sp_sex,sp_age,sp_userGroup); 
END IF; 
END 

回答

1

我覺得你的程序應該是這樣的 -

CREATE PROCEDURE `save_user`(IN `sp_aliasName` VARCHAR(100),IN `sp_password` VARCHAR(100), IN `sp_sex` VARCHAR(100), IN `sp_age` INT(11), IN `sp_userGroup` VARCHAR(100),OUT `sp_number_of_user` INT)  
BEGIN 
    DECLARE temp INT; 
    SELECT count(user_id) INTO sp_number_of_user FROM user WHERE aliasName = sp_aliasname; 
    SET temp := sp_number_of_user; 
    IF temp > 0 THEN 
    UPDATE user SET aliasName = sp_aliasName, password = sp_password, sex = sp_sex, age = sp_age, userGroup = sp_userGroup 
    WHERE aliasName = sp_aliasname; 
    ELSE 
    INSERT INTO user (aliasName, password, sex, age, userGroup) VALUES (sp_aliasName, sp_password, sp_sex, sp_age, sp_userGroup); 
    END IF; 
END 

我說:

  • INT類型OUT參數
  • WHERE子句UPDATE語句(檢查這個條件)

另外,看看INSERT ... ON DUPLICATE KEY UPDATE命令,它可以做你需要的。

+0

我發現我的錯:),你是對的。 我忘了用'SET' – navid

+0

是的,SET也加了;) – Devart