调用存储过程将NULL插入MySQL的所有列

时间:2015-06-24 19:54:09

标签: mysql stored-procedures sql-insert database-table

我在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

由于

1 个答案:

答案 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 demo

建议:避免将参数和变量命名为表格的列,原因如下: SQL Fiddle