2011-01-07 75 views
0

我發現很多接近此的線程,但沒有完全回答我的問題,所以在這裏。在MySQL中的查詢中選擇存儲過程值

我正在寫一份報告,需要使用我聲明爲SELECT字段之一的變量。

這裏是存儲過程的代碼: DROP PROCEDURE IF EXISTS SP_TEST

CREATE PROCEDURE `sp_Test`(facilityId INT, startDate DATE, endDate DATE) 
BEGIN 

DECLARE facilityName VARCHAR(256); 

SELECT facility_name INTO facilityName FROM `reporting`.`facilities` WHERE `reporting`.`facilities`.facility_id = facilityId; 

SELECT `reporting`.`error_stratification`.description AS Stratification, facilityName 
...Rest of query that is not important 

END 

唯一的問題是,它使得字符串「facilityName」我的查詢結果,而不是它的價值。

有沒有辦法強制它在那裏輸出值?

回答

1

我清理你的代碼一點點 - 以下應該提供一個良好的開端您可以繼續的點...

drop procedure if exists sp_test; 

delimiter # 

create procedure sp_test(
in p_facility_id int unsigned, -- p prefix = parameter 
in p_start_date date, 
in p_end_date date 
) 
begin 

declare v_facility_name varchar(255) default null; -- v prefix = variable 

select f.facility_name into v_facility_name from facilities f where 
f.facility_id = p_facility_id limit 1; 

select f.*, upper(v_facility_name) as facility_name from facilities f; 

end# 

delimiter ; 

call sp_test (1, curdate() - interval 1 month, curdate()); 
0

你真的不定義存儲過程中的變量。您可以在BEGIN/END塊中定義它們。

也可能對您有所幫助,這取決於你正在嘗試做的事:

+0

對不起,應該澄清它在存儲過程的BEGIN/END塊中。 – Khirok 2011-01-07 17:15:30

+0

我也嘗試使用用戶定義的變量,但是在存儲過程中,它將包含=的語句視爲字符串,因此我從SELECT語句中獲得(@facName:= facility_name)字符串。 – Khirok 2011-01-07 17:16:50