2013-02-27 43 views
0

我想編寫一個程序:可以將單元關鍵字保存到MYSQL中的變量中嗎?

CREATE PROCEDURE `addByType`(IN myDate DATETIME, IN myType INT, OUT output DATETIME) 
BEGIN 
DECLARE unit ?; 
CASE 
    WHEN myType = 1 THEN 
     SET unit = HOUR;   
    WHEN myType = 2 THEN 
     SET unit = DAY; 
    ... 
END CASE; 
SELECT TIMESTAMPADD(unit, 1, myDate) INTO output; 
END 

是否有可能以某種方式?我可以將單元關鍵字存入變量嗎?還是有另一種方法來實現相同?

回答

1

請有這一個嘗試:

CREATE PROCEDURE `addByType`(IN myDate DATETIME, IN myType INT, OUT output DATETIME) 
BEGIN 

CASE 
    WHEN myType = 1 THEN 
     SET @unit = 'HOUR';   
    WHEN myType = 2 THEN 
     SET @unit = 'DAY'; 
END CASE; 

SET @sql = CONCAT('SELECT TIMESTAMPADD(', @unit, ', 1, \'', myDate, '\') INTO @output;'); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
SET output = @output; 

END 

可能包括語法錯誤,就必須查找某些事情。但我相信你可以弄明白。現在走吧,明天再看看。

P.S:Here's the manual entry for prepared statements

+0

非常感謝。我從你的代碼中編輯了一些小問題,但除此之外,它對我來說非常合適。 我不知道爲什麼我必須引入@output變量,但是我得到「錯誤1327(42000):未聲明的變量:輸出」沒有它。 – 2013-02-27 18:40:54

+0

我找到原因: 「局部變量只在存儲程序執行期間處於作用域中,在準備好的語句中不允許對它們進行引用,因爲這些引用對於當前會話是全局的,並且當語句執行時變量可能超出了作用域「。 (http://dev.mysql.com/doc/refman/5.0/en/local-variable-scope.html) – 2013-02-27 21:49:38

相關問題