mariaDB(MySQL)在使用SELECT INTO后仍然得到“不允许从函数返回结果集”的错误1415
对不起还有一个关于MySQL错误1415的问题!mariaDB(MySQL)在使用SELECT INTO后仍然得到“不允许从函数返回结果集”的错误1415
但我已经花了两个小时对此 - 我已阅读 - 我认为 - 关于*上的错误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));
感谢您的回答!你可以更具体一点,我应该如何添加'OUT'参数? – jackxujh
https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html –
你应该可以解决数据类型,因此当函数要返回一个int不必返回时间戳。而且 - 据我所知 - timestampdiff()返回一个整数,而不是'timestamp'。 –
'SELECT 1 FROM PART WHERE P_NAME = P_PARTNAME'没有'INTO'子句。它试图返回结果集。 –
@GordonLinoff谢谢!我将'DURATION'的数据类型更改为'INT',但它仍然不起作用。 (我也更新了问题中的代码) – jackxujh