我在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语句共享命名空间?
答案 0 :(得分:0)
SQL函数是否与调用它的SELECT语句共享命名空间?
根据您的功能签名定义
CREATE FUNCTION removeYear(passedTitle CHAR(255), passedYear CHAR(100))
RETURNS CHAR(255) DETERMINISTIC
第一个参数的值是 始终 在功能正文中使用其名称 passedTitle
标识只要。
这适用于在任何存储过程中声明定义的任何参数或变量。
因此,如果您在签名中使用title
作为其定义名称passedTitle
的第一个参数的名称,则引擎将无法识别它的运行时并引发错误。