MySQL过程未执行
这是我的程序MySQL过程未执行,mysql,stored-procedures,temp-tables,Mysql,Stored Procedures,Temp Tables,这是我的程序 DELIMITER // CREATE PROCEDURE GET_CHECK_COURSES(IN distid int, IN `accescodeString` TEXT) BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS accesstmp ( `Id` INT NOT NULL AUTO_INCREMENT, `accesscode` VARCHAR(100) NOT NULL, PRIMARY KEY (`Id
DELIMITER //
CREATE PROCEDURE GET_CHECK_COURSES(IN distid int, IN `accescodeString` TEXT)
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS accesstmp (
`Id` INT NOT NULL AUTO_INCREMENT,
`accesscode` VARCHAR(100) NOT NULL,
PRIMARY KEY (`Id`)) ENGINE=InnoDB;
@query = "INSERT INTO accesstmp (`accesscode`) VALUES ('",accescodeString,"')";
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
@query1 = "SELECT
cde.code_status,
co.course_code,
co.course_name,
u.organization,
u1.email as licencinguser,
cul.status,
cul.learning_completion_date
FROM cdp_access_codes as cde
LEFT JOIN cdp_course as co ON cde.course_id = co.course_id
LEFT JOIN cdp_user as u ON u.user_id = cde.licensing_user_id
LEFT JOIN cdp_user as u1 ON u1.user_id = cde.user_id
LEFT JOIN cdp_accesscode_courses as cac ON cac.code_id = cde.code_id
LEFT JOIN cdp_user_licenses as cul ON cul.user_license_id = cac.course_subscription_id
JOIN accesstmp as act ON act.accesscode = cde.access_code
WHERE
cde.distributor_user_id = $distributorId
GROUP BY cde.access_code";
PREPARE stmt2 FROM @query1;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
END //
DELIMITER ;
但是当我执行这个时,我得到了一个语法错误
#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在'@query=“INSERT INTO accesstmp(accesscode
)值('',accescodetring,“)”;'附近使用的正确语法在第10行
我的参数类似于这个参数值distid=24,accescodetring是一个strinh“mmmm,ssss,eeee”您必须使用
concat
和将设置为局部变量,如@variable
:
set @query = concat("INSERT INTO accesstmp (`accesscode`) VALUES ('",accescodeString,"')");
-- ...
set @query1 = "SELECT ...
我认为没有必要在INSERT
中使用<代码>$distributorId
变量应为一个输入参数。用于分配所使用的(`@query`
)。使用函数连接。