我有2个mysql程序。一个叫另一个。我通过phpmyadmin
运行它们。如果第一个过程指定了类型日期的输入变量,然后将其传递给子过程(因此我从phpmyadmin
调用此过程并提供日期),一切正常。但是,如果我尝试在第一个过程中声明该变量并以编程方式为其赋值,然后传递它,则它的行为非常奇怪。我很确定这与变量类型和@
符号有关,但我还没有弄清楚如何让它正常工作。
程序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 PopulatePreviousDayData@", NOW());
CALL DataAnalysis_PopulatePreviousDayData();
SELECT concat("Running Generate Main Data Set@", NOW());
CALL DataAnalysis_GenerateMainDataSet(@dayToRun);
程序2(其中@ p0是日期输入变量)
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 :(得分:0)
使用@ p0语法显示会导致此问题。如果我改为声明一个变量并通过参数本身的名称来赋值它就可以了。