MySQL视图,带有创建输入变量的函数

MySQL视图,带有创建输入变量的函数,mysql,Mysql,是否可以在MySQL中创建一个SQL视图,将输入变量(比如)作为函数参数?我在MySQL网站上找到了这个标题,但不知道如何使用它,因为我对SQL函数非常陌生。当我在MySQL命令提示符下运行这个命令时,它会给我错误。我也不确定这是否是我想要的 create function book_subject returns varchar(64) as return @book_subject; create view thematical_books as select title, author

是否可以在MySQL中创建一个SQL视图,将输入变量(比如)作为函数参数?我在MySQL网站上找到了这个标题,但不知道如何使用它,因为我对SQL函数非常陌生。当我在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();

因为
CREATE函数
语法不正确,所以会出现错误(我喜欢那些MySQL手动用户评论!)。创建此函数的正确语法如下所示:

CREATE FUNCTION book_subject()
RETURNS VARCHAR(64)
RETURN @subject;
创建视图
语法正确

要使用该视图,您需要先设置变量
@book\u subject
,然后再从视图中选择:

SET @book_subject = 'Epic Poems';
然后,当您执行以下操作时:

SELECT * 
FROM   thematical_books;
它将返回所有以“史诗”为主题的书籍的标题和作者


这是一个绕过MySQL视图限制的技巧,“SELECT语句[视图]不能引用系统或用户变量”。您使用一个只返回变量的函数,该函数在每次使用视图时都会被调用。

这是您可能得到的最接近的结果。没有正式的方法将任何参数传递到视图中(因为在FROM子句中引用视图时如何提供参数)。使用会话全局变量和函数(如图所示)是实现效果的唯一方法。它狡猾且容易出错-对于干净的可维护代码来说,属性不好。

@book\u主题变量的范围是什么?