我想创建一个mysql函数,该函数包装几个mysql计算的序列。首先,我只是尝试包装简单的db.test_2.findOne({ "name": "Bob" }).select({ references: 1, _id: 1 })
,但这甚至失败了:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node src/index.js"
}
结果:
'#1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本以使用正确的语法 在第3行的“ SELECT TIMEDIFF(t1,t2)”附近
答案 0 :(得分:2)
您需要按以下方式编写
DELIMITER $$
DROP FUNCTION IF EXISTS diff_minutes $$
CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME)
RETURNS BIGINT
READS SQL DATA
BEGIN
RETURN(
SELECT TIMEDIFF(t1, t2)
);
END;
DELIMITER ;
请参阅demo
READS SQL DATA
表示该函数包含读取数据的语句(例如SELECT
),但不包含写入数据的语句。您还可以在这里辩论使用NOT DETERMINISTIC
而不是在这里,因为您并不是真正在这里“读取”数据...
如手册CREATE FUNCTION中所述。
P.Salmon的评论(在问题下方)
如果存储程序中只有1条语句,则不需要BEGIN 和END块,您无需设置定界符,
非常正确,这也是可能的。
DELIMITER $$
DROP FUNCTION IF EXISTS diff_minutes $$
CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME)
RETURNS BIGINT
READS SQL DATA
RETURN(
SELECT TIMEDIFF(t1, t2)
);
DELIMITER ;
请参阅demo