我尝试使用动态SQL语句在存储过程中检索一个值并将其赋给一个变量。问题是,当执行动态语句时,它不能访问过程作用域中声明的变量。
下面是一段代码(在过程中),用于说明:
DECLARE v_amount_of_samples_that_require_revision INTEGER;
SET query = CONCAT('SELECT count(sample_id) INTO v_amount_of_samples_that_require_revision
FROM ', v_table_name,
'WHERE state = REQUIRES_REVISION_STATE
AND form_id = ', p_form_id);
PREPARE stmt FROM query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
给出的误差当然是:
- SQL错误[1327] [42000]:(conn:7575)未声明的变量:v需要修订的样本数量 *
是否有解决方法?
1条答案
按热度按时间oug3syen1#
使用用户定义的会话变量而不是常规变量
v_table_name仍然可以用于sql注入,并且应该针对白名单进行测试
在where中使用变量时,请使用预处理语句