2011-01-07 16 views
0

私はこれに近い数多くのスレッドを見つけましたが、私の質問に正確に答えています。MySQLのクエリでストアドプロシージャ値を選択

私はSELECTフィールドの1つとして宣言された変数Iを使用する必要があるレポートを作成しています。ここで

は、店舗の手続きコードです: DROP PROCEDURE IFが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 

をEXISTS唯一の問題は、それはそれの価値ではない、私のクエリ結果に「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()); 
+1

集計関数を使用すると問題が修正されたようです。私はこれがMySQLのバグかどうかは分かりませんが、まだサポートされていないチームにサポートチームに送ってきました。助けてくれてありがとう! – Khirok

0

MySQLストアドプロシージャの基本を調べる必要があると思います。

http://www.brainbell.com/tutorials/MySQL/Using_Stored_Procedures.htmこれはあなたを助けます。

+0

私は何をしているのかについて何も見ませんSELECT INTO文を表示する以外はg 私はストアドプロシージャの構造を示すオリジナルの質問を更新して、混乱を修正しました。 – Khirok

0

あなたは本当に、ストアド・プロシージャ内の変数を定義しません。それらをBEGIN/ENDブロック内で定義します。

はまた、あなたがやろうとしているかに応じて、あなたに役立つかもしれない:

+0

申し訳ありませんが、ストアドプロシージャのBEGIN/ENDブロック内にあることを明確にしてください。 – Khirok

+0

また、ユーザー定義変数も使用しようとしましたが、ストアドプロシージャでは、=を文字列として扱うため、SELECT文から(@facName:= facility_name)文字列を取得します。 – Khirok

+0

私はまた、BEGIN/ENDブロックを表示するために格納されたprocの全体構造を表示するための質問を更新しました。 – Khirok