【问题标题】:MySQL Stored Procedure returns nullMySQL 存储过程返回 null
【发布时间】:2013-09-30 06:47:36
【问题描述】:

我确实经历了类似的问题以及他们对 SO 的回答,但这并没有帮助。 这是我的程序:

DELIMITER //
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test()
BEGIN 
DECLARE intime TIME;
SET intime:=(SELECT intime FROM new_attendance  WHERE empid='xxx' AND DATE(dt)='2013-08-02');
SELECT intime;
END //
DELIMITER ;

当我执行这行代码时,它会工作并返回正确的值:

SELECT empid FROM new_attendance  WHERE empid='xxx' AND DATE(dt)='2013-08-02'

但它在程序内部不起作用。我感谢您的帮助。提前非常感谢!

【问题讨论】:

  • erm,是empid 类型的TIME
  • @hjpotter92 sry... intime,编辑有问题,感谢指出。
  • @mavrosxristoforos 及时,不便之处敬请见谅。

标签: mysql procedure


【解决方案1】:

首先,MySQL 中的变量赋值采用= 语法,而不是:= 语法。

编辑:按上面的,看来这两种语法毕竟都支持了……

其次,完全消除 intime 变量并这样做并不简单

DELIMITER //
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test()
BEGIN 
SELECT intime FROM new_attendance  WHERE empid='xxx' AND DATE(dt)='2013-08-02';
END //
DELIMITER ;

【讨论】:

  • @Sunny 另外,如果empidINT 或其派生词,则无需将其括在引号中。在所有。
  • @Sunny 不客气。如果我的回答解决了您的问题,请考虑接受它作为正确的回答。
  • @geomagas 是的,我们可以同时使用 "=" 和 ":=" 进行赋值,但只能与 SET 一起使用,否则 '=" 检查相等性 - MySQL 文档说:)
  • 感谢您提请我注意。
猜你喜欢
  • 2014-04-18
  • 2021-06-11
  • 2012-11-29
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
相关资源
最近更新 更多