繁体   English   中英

MySQL:无法从SELECT语句中调用函数

[英]MySQL: Unable to call function from within SELECT statement

我在SQL中创建了一个称为removeYear的函数。 该函数定义为:

CREATE FUNCTION removeYear(passedTitle CHAR(255), passedYear CHAR(100))
RETURNS CHAR(255) DETERMINISTIC

该功能正常工作。 问题是我无法使用我的列名之一在SELECT语句中调用它。 例如:

SELECT movieid, title
FROM movies
WHERE movieid = 40;

作品。

SELECT movieid, title, removeYear("bluh", movies.year)
FROM movies
WHERE movieid = 40;

作品。

SELECT movieid, title, removeYear(movies.title, movies.year)
FROM movies
WHERE movieid = 40;

给出以下错误: 错误代码:1054“字段列表”中的未知列“标题”

我根本知道是什么导致了此错误。 films.title是有效的列。 我尝试用表中的所有其他列调用该函数,所有这些都可以正常工作。 例如:

SELECT movieid, title, removeYear(movies.movieid, movies.year)
FROM movies
WHERE movieid = 40;

执行得很好。

编辑:令我沮丧的是,我决定无数次遍历包含该函数的代码的100多行,最后在代码中发现引起错误的单个单词。

在整个代码块中,只有一次,我不小心编写了

title

代替

passedTitle

虽然我的问题已解决,但这仍然是一个问题:

SQL函数是否与调用它的SELECT语句共享一个名称空间?

SQL函数是否与调用它的SELECT语句共享一个名称空间?

根据您的功能签名定义

CREATE FUNCTION removeYear(passedTitle CHAR(255), passedYear CHAR(100))
RETURNS CHAR(255) DETERMINISTIC

第一个参数的值始终仅在函数体内使用其名称passedTitle

这适用于在任何存储过程中声明的任何参数或变量。

因此,如果您使用title作为第一个参数的名称,而不是其签名中已定义的名称passedTitle ,则引擎将无法识别它的运行时并抛出错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM