mysql - 不能在 WHERE 子句中使用存储过程参数
问题描述
我的数据库中的一种情况遇到了很多麻烦。
我正在尝试编写一个存储过程,该过程在特定表中完成后将条目插入日志表以进行审计SELECT
(想法是它的工作方式应该类似于AFTER SELECT
触发器的工作方式)。存储过程有一个输入参数,即 WHERE 条件/子句。
用户执行 SP 并写入条件(例如IDCultura=1)。SP 使用该参数进行SELECT
如下声明:SELECT * FROM dba.medicoes WHERE *IDCultura=1*
当我尝试创建一个循环该查询结果的游标时,我的问题就出现了,因此它在日志表中为SELECT
.
我不能将参数用作WHERE
子句,但是如果我在子句中手动编写相同的文本,它就可以工作。
我已经看到一些解决方案CONCAT
在执行之前使用 a 来连接查询的所有部分。但是因为我SELECT
在声明游标时使用了查询,所以之前我不能SET
使用变量。
这是我现在正在使用的代码:
CREATE DEFINER=`root`@`localhost` PROCEDURE `select_medicoes`(
whereCondicao varchar(200))
BEGIN
DECLARE ID_novo int;
DECLARE ID_Variavel int;
DECLARE ID_Cultura int;
DECLARE NumMed int;
DECLARE DataHoraMed date;
DECLARE ValorMed int;
DECLARE done INT DEFAULT FALSE;
DECLARE curs_medicoeslog cursor for
(SELECT *
FROM `dba`.medicoes
WHERE `whereCondicao`);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SELECT `whereCondicao`;
OPEN curs_medicoeslog;
read_loop: LOOP
FETCH curs_medicoeslog INTO ID_Variavel, ID_Cultura, NumMed, DataHoraMed, ValorMed;
INSERT INTO log_medicoes (IDVariavel, IDCultura, NumMedicao, DataHoraMedicao, ValorMedicao, Utilizador, `Data`, Operacao)
VALUES (ID_Variavel, ID_Cultura, NumMed, DataHoraMed, ValorMed, current_user(), now(), 'S');
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE curs_medicoeslog;
END
解决方案
推荐阅读
- java - 在 for 循环中跳过数字
- ios - Nativescript-vue原生iOS导航按钮在ActionBar上设置标题后消失
- javascript - 自动完成标签未在隐藏元素上显示数据
- django - 使用docker的django、nginx和gunicorn应用程序的静态文件?
- wordpress - 在 wordpress 中创建自定义循环
- r - 为数据框中的所有字符串分配相同的值
- java - 运行spring boot jar时使用外部jar作为依赖文件
- c# - 从 ASP.NET 网站发送电子邮件时如何解决随机错误
- dart - 我无法运行我的颤振应用程序。它说 Flutter 需要 Android SDK 28,而我有 sdk 28
- java - 如何获取用户浏览的文件的文件路径()?