调用mysql过程时表名无效

时间:2012-02-05 00:04:10

标签: mysql

这是我的程序:

DROP PROCEDURE IF EXISTS `couponExpires`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `couponExpires`(IN couponID BIGINT, OUT 
expirationDate TIMESTAMP)
BEGIN
SELECT purchaseTimestamp
INTO expirationDate
FROM CouponUnique
WHERE couponUniqueID=couponID;
END$$

这是我的电话:

CALL couponExpires(1, @expirationDate);
SELECT @expirationDate;

这给了我一个blob。 blob 19B,当我点击它时,它给出了错误“无效的表名。”

而且,是的,表存在:

CREATE TABLE IF NOT EXISTS `CouponUnique` (
`couponUniqueID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`couponPackageID` int(10) unsigned NOT NULL,
`userID` int(10) unsigned NOT NULL,
`purchaseTimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`useTimestamp` timestamp NOT NULL DEFAULT '1970-01-01 07:00:01';

知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

定义功能,而不是过程

DROP FUNCTION IF EXISTS couponExpires$$
CREATE FUNCTION couponExpires(IN couponID BIGINT)
RETURNS DATETIME
BEGIN
    RETURN (
        SELECT purchaseTimestamp
        FROM CouponUnique
        WHERE couponUniqueID=couponID);
END$$

然后

SELECT couponExpires(1);


您将遇到的另一个问题是您使用了错误的数据类型。您应该使用DATETIME,而不是TIMESTAMP。更新/插入行时,TIMESTAMP会自动更新当前时间,并且您无法为其提供值 - 即使为null。