2009-10-11 9 views
4

Est-il possible de créer une vue SQL dans MySQL qui prend une variable d'entrée comme argument de fonction? J'ai trouvé cette légende du site Web de MySQL mais je ne suis pas sûr de savoir comment l'utiliser car je suis assez nouveau pour les fonctions SQL. Quand je lance ceci dans l'invite de commande MySQL, cela me donne des erreurs. Aussi je ne suis pas sûr si c'est même ce que je cherche?Vue MySQL avec une fonction pour créer une variable d'entrée

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(); 

Répondre

5

Vous obtenez des erreurs car la syntaxe CREATE FUNCTION est incorrect (Gotta love ces commentaires des utilisateurs MySQL manuel!). La syntaxe correcte pour la création de cette fonction est la suivante:

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

La syntaxe CREATE VIEW est correcte.

Pour utiliser la vue, vous devez définir la @book_subject variable avant que vous sélectionnez dans la vue:

SET @book_subject = 'Epic Poems'; 

Puis, quand vous faites:

SELECT * 
FROM thematical_books; 

Il retournera le titre et l'auteur de tous les livres qui ont un sujet de 'Poèmes épiques'

Ceci est un truc pour contourner la restriction des vues MySQL que "L'instruction SELECT [de la vue] ne peut pas faire référence à des variables système ou utilisateur. " Vous utilisez une fonction qui retourne juste la variable, et cette fonction est appelée chaque fois que la vue est utilisée.

+1

Quelle est la portée de la variable @book_subject? –

1

Ceci est à peu près aussi proche que vous êtes susceptible d'obtenir. Il n'y a pas de manière officielle de faire passer des arguments dans une vue (car comment fournir l'argument lorsque la vue est référencée dans la clause FROM). L'utilisation d'une variable globale de session et d'une fonction comme indiqué est à peu près le seul moyen d'obtenir l'effet. Il est sournois et sujettes aux bugs - pas de bons attributs pour un code propre et maintenable.

Questions connexes