我正在使用MyPhpAdmin 4.2可视化编辑器。当我调用存储过程并传递参数值时,我没有返回任何行,并输出参数值显示空值。
SET @p0='1'; SET @p1='1'; SET @p2='41'; SET @p3='1'; CALL `ps_stp_getPrograms`(@p0, @p1, @p2, @p3);
BEGIN
CREATE TEMPORARY TABLE temp_progs(prog_id bigint(20));
IF @countyID > 0 THEN
INSERT INTO temp_progs (prog_id)
SELECT 1 from ps_prog_county
WHERE ps_prog_county.county_id = @countyID AND ps_prog_county.prog_id = @progID;
END IF;
IF @ServiceID > 0 THEN
INSERT INTO temp_progs (prog_id)
SELECT 1 from ps_prog_services
WHERE ps_prog_services.svc_id = @ServiceID AND ps_prog_services.prog_id = @progID;
END IF;
IF @popID > 0 THEN
INSERT INTO temp_progs (prog_id)
SELECT 1 from ps_prog_served
WHERE ps_prog_served.served_id = @popID AND ps_prog_served.prog_id = @progID;
END IF;
SELECT DISTINCT prog_id FROM temp_progs;
SELECT @progID, @countyID, @ServiceID, @popID;
END
如果我设置了它按预期返回的值
SET @progID = 1;
SET @countyID = 1;
SET @ServiceID = 41;
SET @popID = 1;
答案 0 :(得分:2)
您必须在其正文中使用相同的存储过程参数名称。
使用用户变量时,它们与参数中的SP不同。
示例:
delimiter //
create procedure
ps_stp_getPrograms(
IN progID int
, IN countyID int
, IN ServiceID int
, IN popID int
)
BEGIN
CREATE TEMPORARY TABLE temp_progs( prog_id bigint(20) );
IF countyID > 0 THEN
INSERT INTO temp_progs( prog_id )
SELECT 1 from ps_prog_county
WHERE ps_prog_county.county_id = countyID
AND ps_prog_county.prog_id = progID;
END IF;
IF ServiceID > 0 THEN
INSERT INTO temp_progs ( prog_id )
SELECT 1 from ps_prog_services
WHERE ps_prog_services.svc_id = ServiceID
AND ps_prog_services.prog_id = progID;
END IF;
IF popID > 0 THEN
INSERT INTO temp_progs ( prog_id )
SELECT 1 from ps_prog_served
WHERE ps_prog_served.served_id = popID
AND ps_prog_served.prog_id = progID;
END IF;
SELECT DISTINCT prog_id FROM temp_progs;
SELECT progID, countyID, ServiceID, popID;
END;
//
delimiter ;