【发布时间】:2011-12-09 16:14:19
【问题描述】:
关于使用带有事务的 MySQL 存储过程,我在获取错误输出时遇到了问题。
问题是我需要设置一个 exit_handler 以在任何失败时回滚事务。但是当我这样做时,如果出现问题,我不会得到任何错误输出。例如,如果我不小心传递了一个 NULL 值并尝试将其插入到非空字段中。
我使用返回值以编程方式指示成功或失败,但这并不能告诉我实际出了什么问题。
我正在使用 Perl DBI 与 MySQL 通信。我在生产服务器上使用 MySQL 5.0.92,在开发服务器上使用 MySQL 5.0.51a。升级到更新版本的 MySQL 在政治上是站不住脚的。
这是一个简化的例子:
DELIMITER //
CREATE PROCEDURE pmt_new(
app_id varchar(40),
out ret tinyint unsigned,
out pmt_req_id int(10) unsigned)
BEGIN
DECLARE v_pmt_req_type int(10) unsigned;
DECLARE exit handler for not found, sqlwarning, sqlexception rollback;
set ret=1;
START TRANSACTION;
SELECT pmt_type INTO v_pmt_req_type FROM pmt_req_types WHERE pmt_req_name = 'Name 1';
INSERT INTO pmt_reqs (pmt_req_id, pmt_req_type, app_id)
values (null, v_pmt_req_type, app_id);
set pmt_req_id = last_insert_id();
INSERT INTO other (pmt_req_id) values (pmt_req_id);
COMMIT;
set ret=0;
END//
DELIMITER ;
【问题讨论】:
标签: mysql perl stored-procedures dbi