2009-10-11 35 views
4

是否可以在MySQL中创建一个SQL视图,该视图将输入变量say用作函数参数?我从MySQL网站上找到了这个标题,但我不确定如何使用它,因为我对SQL函数很陌生。当我在MySQL命令提示符下运行这个命令时,它给了我错误。此外,我不确定这是甚至我正在寻找什么?带有创建输入变量函数的MySQL视图

create function book_subject 
returns varchar(64) as 
return @book_subject; 

create view thematical_books as 
select title, author 
from books 
where subject = book_subject(); 

回答

5

你得到错误,因为CREATE FUNCTION语法不正确(总得爱那些MySQL手册用户评论!)。创建此功能的正确语法如下:

CREATE FUNCTION book_subject() 
RETURNS VARCHAR(64) 
RETURN @subject; 

CREATE VIEW语法是正确的。

为了使用视图,你需要设置变量@book_subject您从视图中选择前:

SET @book_subject = 'Epic Poems'; 

然后,当你做一个:

SELECT * 
FROM thematical_books; 

它将返回所有具有“史诗”主题的书籍的作者和作者

这是一个避开MySQL视图限制的技巧,即“SELECT语句[该视图]不能引用系统或用户变量。“你使用一个只返回变量的函数,并且每次使用视图时都调用该函数。

+1

@book_subject变量的作用域是什么? – 2010-10-06 20:08:14

1

这与您可能得到的差不多。没有官方的方式来获取任何传递给视图的参数(因为在FROM子句中引用视图时如何提供参数)。使用会话全局变量和函数如图所示是实现该效果的唯一方法。这是偷偷摸摸和容易出错的 - 对于干净的可维护代码来说不是很好的属性。