MySQL представление с функцией для создания входной переменной - PullRequest
4 голосов
/ 12 октября 2009

Можно ли создать представление MySQL в MySQL, которое принимает входную переменную, скажем, в качестве аргумента функции? Я нашел этот заголовок на веб-сайте 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();

Ответы [ 2 ]

5 голосов
/ 12 октября 2009

Вы получаете ошибки, потому что синтаксис 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 голос
/ 12 октября 2009

Это примерно так близко, как вы, вероятно, получите. Не существует официального способа передать аргументы в представление (потому что, как вы предоставляете аргумент, когда на представление ссылаются в предложении FROM). Использование глобальной переменной сеанса и функции, как показано, является единственным способом достижения эффекта. Это подлый и подверженный ошибкам - не очень хорошие атрибуты для чистого обслуживаемого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...