MySQL存储过程,插入$table
我试图创建一个存储过程来首先创建一个表(如果它还不存在的话)。本部分功能与预期一致:MySQL存储过程,插入$table,mysql,stored-procedures,set,sql-insert,concat,Mysql,Stored Procedures,Set,Sql Insert,Concat,我试图创建一个存储过程来首先创建一个表(如果它还不存在的话)。本部分功能与预期一致: BEGIN SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; 创建表之后,或者如果表已经存在,我希望存储的pro
BEGIN
SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
创建表之后,或者如果表已经存在,我希望存储的prosedure在其中转储一组数据
SET @sql = CONCAT('INSERT INTO ',`@variable_table`,' (
`col1`,`col2`,`col3`,`col4`,`col5`)
VALUES (
`@D1`,`@D2`,`@D3`,`@D4`,`@D5`);');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
如果我将“,@variable\u table
”与现有的\u table\u名称交换,代码将按预期工作。
是否可以在此处使用变量运行代码?在这种情况下,我该如何运行?在过去几个小时的反复尝试后,我发现了错误,代码现在正在运行:
BEGIN
SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @sql = CONCAT('INSERT INTO ',`@variable_table`,' (`col1`,`col2`,`col3`,`col4`,`col5`)
VALUES ("',`@D1`,'","',`@D2`,'","',`@D3`,'","',`@D4`,'","',`@D5`,'");');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
在我看来,我的语法错误出现在代码的“”区域。
如您所见,我所做的唯一更改是将
@D1
变量置于“文本”之外,并在变量两侧的文本内添加了“变量”。EXECUTE@stmt USING variables语句看起来更好一些:
BEGIN
SET @sql = CONCAT(
'CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @sql = CONCAT(
'INSERT INTO ',`@variable_table`,
' (`col1`,`col2`,`col3`,`col4`,`col5`) VALUES (?,?,?,?,?);'
);
PREPARE stmt FROM @sql;
EXECUTE stmt USING @D1, @D2, @D3, @D4, @D5;
DEALLOCATE PREPARE stmt;
END;
您忘了提及现有代码面临的问题。@stickybit很抱歉,它返回了一条语法错误消息,并要求我检查文档。请回答问题并将该消息作为文本包含,没有屏幕截图。是的,确实如此。谢谢!