2009-10-11 61 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子句中引用視圖時如何提供參數)。使用會話全局變量和函數如圖所示是實現該效果的唯一方法。這是偷偷摸摸和容易出錯的 - 對於乾淨的可維護代碼來說不是很好的屬性。