我在MySQL中创建了一个存储过程以帮助调试某些东西,但是当我调用存储过程时,它会在我的表中为所有列插入NULL值
表
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 ;
调用这样的程序
CALL EncryptionDebug('test','test');
当i SELECT * FROM EncryptionDebug
时,为两列返回NULL由于
答案 0 :(得分: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 。