2015-06-24 38 views
1

我創建MySQL中的存儲過程來幫助調試的東西,但是當我把它插入NULL值存儲過程到我的表中的所有列調用存儲過程中插入空值到所有列的MySQL

CREATE TABLE `EncryptionDebug` (
`ObservedValue` mediumtext COLLATE utf8_unicode_ci, 
`PublicKey` mediumtext COLLATE utf8_unicode_ci 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

存儲過程

DELIMITER // 

CREATE PROCEDURE `EncryptionDebug`(IN `ObservedValue` MEDIUMTEXT, IN  `PublicKey` MEDIUMTEXT) 
MODIFIES SQL DATA 
BEGIN 
    DECLARE `ObservedValue` MEDIUMTEXT; 
    DECLARE `PublicKey` MEDIUMTEXT; 

     INSERT INTO `EncryptionDebug` (`ObservedValue`,`PublicKey`) VALUES  (ObservedValue,PublicKey); 
END// 

DELIMITER ; 

調用像這樣

程序10
CALL EncryptionDebug('test','test'); 

返回null兩列,當我SELECT * FROM EncryptionDebug

感謝

回答

0

從文檔:

13.6.4.2 Local Variable Scope and Resolution

...

的局部變量不應該與表格列具有相同的名稱。

...

一個選項嘗試:

DELIMITER // 

CREATE PROCEDURE `EncryptionDebug1`(
    `ObservedValue` MEDIUMTEXT, 
    `PublicKey` MEDIUMTEXT 
) 
MODIFIES SQL DATA 
BEGIN 
    /* 
    DECLARE `ObservedValue` MEDIUMTEXT; 
    DECLARE `PublicKey` MEDIUMTEXT; 
    */ 
    INSERT INTO `EncryptionDebug` (`ObservedValue`, `PublicKey`) 
    VALUES 
    (`ObservedValue`, `PublicKey`); 
END// 

DELIMITER ; 

SQL Fiddle demo

建議:避免命名參數和變量爲您的表中的列,這裏的原因:SQL Fiddle