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

时间:2014-03-30 23:02:49

标签: mysql sql function select

我在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'字段列表'中的未知列'标题'

我只是没有想法导致此错误的原因。 movies.title是一个有效的列。我试过在我的表中的每个其他列调用该函数,这些都工作正常。例如:

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

执行得很好。

编辑: 令我沮丧的是,我决定在无数次的情况下查看包含该函数的100多行代码,最后发现导致错误的代码中的单个单词。

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

title

而不是

passedTitle

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

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

1 个答案:

答案 0 :(得分:0)

  

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

根据您的功能签名定义

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

第一个参数的值是 始终 在功能正文中使用其名称 passedTitle 标识只要。

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

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