如何在MariaDB中使用动态SQL语句将值选择到变量中进行赋值?

nbewdwxp  于 10个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

我尝试在存储过程中使用动态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)未声明的变量:需要修订的样品数量
是否有解决方法?

vatpfxk5

vatpfxk51#

而不是使用用户定义会话变量的常规变量
v_table_name仍然可以用于SQL注入,并且应该针对白名单进行测试
在where lause预处理语句中使用变量时

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 = ?');                    
SET @p_form_id =  p_form_id;
PREPARE stmt FROM @query;
EXECUTE stmt USING @p_form_id;
DEALLOCATE PREPARE stmt;
SELECT @v_amount_of_samples_that_require_revision;

字符串

相关问题