我有这个存储过程:
DELIMITER $$
CREATE DEFINER=`old_dev_user`@`%` PROCEDURE `p_refresh_selling_table`(location_id VARCHAR(5))
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
SET sql_log_off = 1;
START TRANSACTION;
IF (location_id = '') THEN
DELETE FROM selling_table;
INSERT INTO selling_table
(column1,
column2,
column3,
..
..
.
)
(SELECT DISTINCT original_table.id,
..
..
..
..
);
ELSE
DELETE FROM selling_table where id=location_id;
INSERT INTO selling table
(column1,
column2,
column3,
..
..
.
)
(SELECT DISTINCT original_table.id,
..
..
..
..
);
END IF;
COMMIT;
END$$
DELIMITER ;
我遇到的问题是存储过程执行时没有任何错误,但结果没有按预期更新到selling_table:
mysql> CALL `site_database`.`p_refresh_selling_table`(81);
Query OK, 0 rows affected (0.01 sec)
我知道表应该按预期填充,因为当我运行存储过程的select部分((SELECT DISTINCT original_table.id ..)时,我得到结果的输出,然后应该转到销售表。
我还检查了权限,用户(尽管与定义者不同)对存储过程中使用的数据库/模式具有所有权限。
此外,我在单独的(本地)环境中复制了此架构,并且此存储过程执行得很好,我可以看到sales_table填充了预期的结果。
请指出正确的方向,说明为什么没有填充sell_table。
谢谢
答案 0 :(得分:1)
我建议您安装common_schema并使用rdebug调试存储过程:
http://code.openark.org/blog/mysql/taking-common_schemas-rdebug-to-a-test-drive