mysql - 如何创建接受参数的存储过程

标签 mysql sql stored-procedures

我有一组 SQL 语句

DROP TABLE IF EXISTS data.s;
CREATE TABLE data.s LIKE data._style;
INSERT INTO data.s Values (?,?,?,?,?,?,?,?,?,?,?,?,?);

UPDATE data.s n JOIN data.s_ o ON n.ID = o.ID SET n.TC = o.TC;
UPDATE data.s n JOIN data.s_ o ON n.ID = o.ID SET n.VR = o.VR;
UPDATE data.s n JOIN data.o_ o ON n.ID = o.ID SET n.OC = o.OC;
DELETE FROM data.s WHERE TC <= 0;
DELETE FROM data.s WHERE TC < 100;
DELETE FROM data.s WHERE OC < 100 ;

以“s”表为例,如何创建一个 SP,其中“s”是一个变量,可以替换为 t、u v、z……等等?我想用 SQL 调用语句更改此变量。

最佳答案

MySQL不处理真正的动态SQL,所以你必须使用准备好的语句。

查看已接受的答案:How To have Dynamic SQL in MySQL Stored Procedure尤其是他提供的链接(动态 SQL 部分)。

类似于:

CREATE PROCEDURE `execute`(IN sqlQuery varchar(255))
BEGIN

    set @sqlQuery := sqlQuery;

    prepare stmp from @sqlQuery; 

    execute stmp;

    deallocate prepare stmp; 

END

CREATE PROCEDURE `yourProcName`(IN tableName varchar(50))
BEGIN

    call execute(concat('DROP TABLE IF EXISTS ', tableName));
    call execute(concat('CREATE TABLE ', tableName, ' LIKE data._style'));

    ...

END

关于mysql - 如何创建接受参数的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172521/

相关文章:

postgresql - 如何从 plpgsql 中的多个表返回多行?

php - 如何将 MySQL 数据库实现到网页中?

MYSQL 触发器从另一个表插入

sql - 使用 GROUP BY 连接两个 SQL 表未达到预期结果

sql-server - SQL Server - native 编译存储过程和普通存储过程的区别

mysql - SELECT 可以单独工作,但在分配给游标时返回 0 行

mysql - 如何优化这个慢速 sql 查询?

mysql - 图同表的 SQL 查询

php - SQL 类似和类似

mysql - 如何在 ZF2 中获取 SQL 查询中出现的次数