我在一个表上运行一个触发器函数,在某些情况下会引发异常。
我维护一个在Catalyst上运行的旧Perl应用程序,它创建一个事务并在表上插入行。
当触发器函数引发异常时,我希望能够打印出我抛出的错误消息,而不是任何调试信息(数据库操作,上下文,perl文件等)。
例如,如果我的函数抛出类似的东西:
raise exception 'Item with id % cannot be shipped at this time.', new.id;
我想只看
目前无法发货ID为13的物品。
而不是
DBIx :: Class :: Row :: insert():DBI异常:DBD :: Pg :: st执行失败:ERROR:此时无法发送ID为13的项目。 [for Statement“INSERT INTO ... at /home/../lib/Class/Controller/Inv.pm line 260
perl代码目前类似于
$c->model('Class')->schema->txn_do(sub {
...
eval {
$shipment->insert;
1;
} or do {
$error = $@;
last;
};
if ($error) {
$c->stash->{error} = $error;
}
);
谢谢。
答案 0 :(得分:3)
也许这种替代:
my $error = $@;
$error =~ s/^.*ERROR: (.*) \[for Statement.*$/$1/;
答案 1 :(得分:1)
你可以访问数据库句柄的errstr()方法,这就是传递给warn / die的方法
warn $c->model('Class')->schema->storage->dbh->errstr();