2013-08-26 102 views
0

我想將參數傳遞給我創建的視圖。 這是我的代碼。將參數傳遞給MySQL查看

CREATE FUNCTION param1() RETURNS VARCHAR(50) DETERMINISTIC NO SQL RETURN @param1; 
CREATE VIEW `view_stats` AS SELECT * FROM `history` WHERE fullname = param1() ; 

這是我的查詢

SELECT st.*, mtr.max_open_trades, mtr.max_draw_down FROM `view_stats` AS ST INNER JOIN `mtrecords` AS mtr ON st.login = mtr.login WHERE st.login=? 

如何傳遞參數給view_stats在此查詢?

+0

當你說「傳遞參數來查看」,你的意思是「在WHERE子句中使用函數返回值」? –

+0

@ÁlvaroG.Vicarioyes :) – DanR

+0

而'WHERE fullname = param1()'不滿足您的需求,因爲您希望在創建視圖時對該值進行硬編碼,而不是每次查詢視圖時都對其進行評估? –

回答

0

一個SQL視圖可以被認爲是在其他查詢中包含一個被鎖定的子查詢的簡寫,所以它不能做任何正常查詢無法做到的事情。如果參數需要在結構上更改正在運行的查詢,則需要將整個查詢放入某種函數中。

看起來您在這裏所做的只是設置WHERE子句,因此您可以在視圖中包括要過濾的列,並在查詢時使用WHERE子句。

0

是的,您可以通過創建一個函數從會話變量中獲取值,以簡單的方式將參數傳遞給您的視圖。該技術見https://www.stackoverflow.com/questions/14511760。這是我的創建函數的副本,您可能希望在之後進行修改。 DELIMITER //

CREATE FUNCTION fn_getcase_id()
退貨MEDIUMINT(11) 確定性NO SQL BEGIN

看到stackoverflow.com/questions/14511760和兩次或更多次閱讀所有信息。 Wh是2017年4月13日

RETURN @sv_case_id; 

END //

DELIMITER; 您將需要創建一個類似的FN(每個變量一個)。