繁体   English   中英

MySQL存储过程,使用PREPARE / EXECUTE执行从表中提取的SQL

[英]MySQL Stored Procedure, Execute SQL Taken from Table using PREPARE/EXECUTE

我在使用PREPARE和EXECUTE时遇到了麻烦,因为我在做一些奇怪的事情-执行从数据库中获取的预先准备的SQL语句(而不是在存储过程中构建它)。

我看到了问题MySQL ::在Variable中运行SQL语句 ,这是我的SQL动态查询,执行该操作并将其输入存储过程中的变量中 ,从这些数据中得知,我不能在prepare语句中使用SP DECLARED变量(MySQL WorkBench提供了一个并在出现错误时立即尝试),因此必须使用带有“ AT符号”的变量(不确定这是什么意思?)。 所以这就是我一直在努力使以下工作:

声明sqlUpdateSp TEXT;

IF (SELECT EXISTS (SELECT updateSql FROM sys_instantUpdates WHERE expiryDate >= NOW() AND securityToken = securityTokenIn AND updateType = updateTypeIn)) THEN
    SELECT updateSql INTO sqlUpdateSp FROM sys_instantUpdates WHERE expiryDate >= NOW() AND securityToken = securityTokenIn AND updateType = updateTypeIn;  
    SET @phlanx = sqlUpdateSp;
    PREPARE sqlToExecute FROM @phlanx;
    EXECUTE sqlToExecute;
END IF

我没有收到任何错误,其余SP功能正常,但是此SQL从未执行过,我猜是因为'sqlToExecute'格式不正确。

我可以在SP的PREPARE / EXECUTE上找到的所有内容都假定正在执行的SQL是在SP中创建的,而不是从数据库中提取的。

尝试使用stmt而不是sqlToExecute

DECLARE sqlUpdateSp TEXT;

IF (SELECT EXISTS (SELECT updateSql FROM sys_instantUpdates WHERE expiryDate >= NOW() AND securityToken = securityTokenIn AND updateType = updateTypeIn)) THEN
    SELECT updateSql INTO sqlUpdateSp FROM sys_instantUpdates WHERE expiryDate >= NOW() AND securityToken = securityTokenIn AND updateType = updateTypeIn;  
    SET @phlanx = sqlUpdateSp;
    PREPARE stmt FROM @phlanx;
    EXECUTE stmt ;
END IF

对所有人表示歉意-这似乎是随机开始的。 我不确定在测试过程中MySQL是否正在缓存结果,因此没有显示更新,但是在不更改代码的情况下工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM