2012-05-20 91 views
1

我試圖做一個存儲過程調用AddCluster 巫婆走的是參數「標題」和「ALT」MYSQL:存儲過程,插入一行,然後通過LAST_INSERT_ID()選擇它

案例1:

如果'標題'是在數據庫然後只是返回「舊」行!

案例2:

如果 '標題' 是不是在數據庫中,然後,

插上parmerer '標題' 和 'ALT'

再行基本選擇通過LAST_INSERT_ID()添加新行

問題是在案例2它只返回空!

-- -------------------------------------------------------------------------------- 
-- AddCluster Group Routines 
-- -------------------------------------------------------------------------------- 
DELIMITER $$ 

CREATE DEFINER=`linkbay_dk`@`%` PROCEDURE `AddCluster`(in in_title varchar(45), in in_alt text) 
BEGIN 
    /* check if 'in_title' is in db */ 
    IF EXISTS 
    (
     SELECT count(*) FROM Cluster 
     WHERE title=in_title 
    ) 
    THEN 
     /* returns old Cluster there is in db */ 
     SELECT * FROM Cluster WHERE title=in_title; 
    ELSE 
     INSERT INTO Cluster 
     (
      `id`, 
      `create_at`, 
      `title`, 
      `alt` 
     ) 
     VALUES 
     (
      null, 
      NOW(), 
      in_title, 
      in_alt 
     ); 
     /* returns the newly added Cluster */ 
     SELECT * FROM Cluster WHERE id=LAST_INSERT_ID(); 
    END IF; 
END$$ 

回答

0

只是一個小小的更新。 我找到錯誤..這是count(*)

SELECT count(*) FROM Cluster WHERE title=in_title 

它應該是這樣的:

SELECT * FROM Cluster WHERE title=in_title 

見孔更新存儲過程here!

0

嘗試插入而不指定ID:

... 
ELSE 
    INSERT INTO Cluster 
    (
     `create_at`, 
     `title`, 
     `alt` 
    ) 
    VALUES 
    (
     NOW(), 
     in_title, 
     in_alt 
    ); 
    /* returns the newly added Cluster */ 
    ... 

確保Cluster.idAUTO_INCREMENT列,只有這樣你可以用LAST_INSERT_ID()獲得價值。

+0

試試看不指定ID ... AUTO_INCREMENT已打開,但沒有運氣:( – Voidcode

+0

)如果從命令行運行INSERT和SELECT查詢,它是否按預期工作? – ilanco

+0

我正在使用MySQL Workbench,但是使用SQL編輯器可以使INSERT d針對'集羣'表的SELECT查詢...我可以調用AddCluster(),它在情況1中返回一行,但在情況2中不返回。 – Voidcode