很抱歉再次出现关于MySQL错误1415的问题!
但我已经花了两个小时在这个问题上——我已经阅读了——我想——关于StackOverflow上的错误1415的所有类似问题,以及谷歌的许多结果,但不幸的是,我仍然无法找出以下函数声明的错误所在。
我正在使用标准的1GBTPC-H数据库来完成一些课程作业。该函数用于计算完成嵌入式SQL查询所需的时间。
DELIMITER //
CREATE FUNCTION
TestIndex (
P_PARTNAME CHAR(55)
)
RETURNS INTEGER
BEGIN
DECLARE
BEGINTIME TIMESTAMP(3);
DECLARE
ENDTIME TIMESTAMP(3);
DECLARE
DURATION INT;
SELECT
CURRENT_TIMESTAMP(3)
INTO
BEGINTIME;
SELECT
1
FROM
PART
WHERE
P_NAME = P_PARTNAME;
SELECT
CURRENT_TIMESTAMP(3)
INTO
ENDTIME;
SELECT
TIMESTAMPDIFF(MICROSECOND, BEGINTIME, ENDTIME)
INTO
DURATION;
RETURN DURATION;
END //
我使用的是mariaDB,Fedora 26上的最新版本(是的,它在Fedora上,不能更新了,哈哈)——嗯,我认为这与我的DBMS版本无关。
当我浏览了前几篇文章中的优秀解决方案时,我改变了很多原始函数,并尽我所能确保每一行都在MySQL的能力范围内(例如,教科书上的给定示例使用了PERFORM * FROM
,这是PostgreSQL的一个特殊示例,因此根据多篇文章,我切换到了SELECT 1 FROM
。
我甚至尝试过RETURN 1
,但仍然是1415错误。我运行了语法规则吗?谢谢
将其转换为存储过程。然后你可以做SELECT
,或者其他什么。
同时,有一个包含定时结果的OUT
参数。
计算可以简化为跳过声明并使用
SET @BEGINTIME := CURRENT_TIMESTAMP(6);
...
SET OutResult := TIMESTAMPDIFF(MICROSECOND, @BEGINTIME, CURRENT_TIMESTAMP(6));