Вы получаете ошибки, потому что синтаксис 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 [представления] не может ссылаться на системные или пользовательские переменные». Вы используете функцию, которая просто возвращает переменную, и эта функция вызывается каждый раз, когда используется представление.