我想为表中的每一行运行一个存储过程,并使用结果更新该行。
我的照片是这样的:
UPDATE `vouchers` SET `code` = (CALL voucherCode('db.vouchers', 3, 4))
WHERE `code` IS NULL;
使用Function不是一个选项,因为存储过程包含动态sql。如果比使用结果集更容易,也可以使用输出参数。目前,该过程定义如下,但可以很容易地采用以产生单行结果,以便在上面的代码示例中按预期运行。
`voucherCode`( IN `tableName` VARCHAR(40),
IN `segments` INT(32), IN `segmentLength` INT(32), OUT `code` VARCHAR(32) )
我到目前为止唯一的解决方案是创建另一个存储过程,该过程利用游标迭代凭证表,并在循环中调用voucherCode
- 过程。
那么从插入或更新查询中调用存储过程的最佳方法是什么?