2016-04-07 6 views
0

2つのmysqlプロシージャがあります。一方は他方を呼び出します。私はphpmyadmin経由でそれらを実行しています。最初のプロシージャが型日付の入力変数を指定し、それをサブプロシージャに渡すと(そして、このプロシージャをphpmyadminから呼び出して日付を指定します)、すべて正常に動作します。しかし、最初のプロシージャでその変数を宣言し、プログラムで値を代入して渡すと、非常に奇妙な動作をします。私はこれが変数型と@シンボルと関係しているとは確信していますが、それを正しく動作させる方法をまだ考えていません。あなたがいただきましたがconcatsを見ることで起こって見ることができますストアドプロシージャを呼び出す変数は、入力変数から来た場合にのみ機能します

手順1

BEGIN 
SET @dayToRun = NULL; 
SELECT DATE_ADD(DATE(NOW()), INTERVAL -1 DAY) INTO @dayToRun; 
SELECT concat("Running analytics for date:",@dayToRun); 
SELECT concat("Running [email protected]", NOW()); 
CALL DataAnalysis_PopulatePreviousDayData(); 
SELECT concat("Running Generate Main Data [email protected]", NOW()); 
CALL DataAnalysis_GenerateMainDataSet(@dayToRun); 

(@ P0は日付入力変数である)手順2

SET @indate = @p0; 
SELECT "Starting gmds"; 
SELECT concat("Input Date:",@indate); 
SELECT concat("Input Date:",indate); 
SELECT concat('Input Date:',@indate); 

。 @記号のないものだけが有効です。他の文字は、最初の文字列を出力しません。しかし、このプロシージャは、変数が@のように動作します。これは、phpmyadminを使用して呼び出され、日付変数を指定したときに正常に機能します。

concat("Input Date:",@indate) 
NULL 

concat("Input Date:",indate) 
Input Date:2016-04-06 

concat('Input Date:',@indate) 
NULL 

この変数がクエリで使用されると、プロシージャは中断します。

答えて

0

@ p0の構文を使用すると表示されます。代わりに変数を宣言し、それをパラメータ自体の名前で代入すればOKです。

関連する問題